如何从Vim内部交错行?

时间:2018-09-19 22:16:22

标签: vim

给出一个具有偶数行的文件, 从下半部分到上半部分交织线条 半?例如,从此:

a
b
c
1
2
3

对此:

a
1
b
2
c
3

一个可能的解决方案是将这些一半写成 分隔的文件,然后使用paste实用程序。

:1,3w a | 4,6w b
:%!paste -d \\n a b

但是,我想在其中找到一种简短的方法 Vim-使用本机命令。

1 个答案:

答案 0 :(得分:6)

:g命令通常用于迭代行和 执行一些命令。在这种情况下,它可以用来 在文件后半部分的行上进行迭代,而 将线从上半年移至适当位置 :m的相对位置。

考虑到光标在第一行 下半部分,必须在第一行之前 从上半年开始,所以我们可以使用:1 m -1将其移到那里 (将第1行相对于光标移动到位置-1)。后 现在,第1行是第二行之前的内容 下半场。因此,这是移动光标的问题 向下并重复此过程,方便地由 :g。简而言之,第一个跳到第二个的第一行 一半加上 5 0 ,然后:

:,$g/^/1m-1

作为将整个块的范围取为 隔行扫描(两半)或默认为整个文件:

command! -range=% Interleave execute 'keeppatterns'
            \ (<line2>-<line1>+1)/2+<line1> ',' <line2>
            \ 'g/^/<line1> move -1'
:Interleave

注意::Interleave使用:keeppatterns来防止 从更改中搜索寄存器和历史记录。 :keeppatterns 需要Vim 7.4.083 +