代码之家  ›  专栏  ›  技术社区  ›  sidyll

如何从Vim内部交错行?

vim
  •  3
  • sidyll  · 技术社区  · 6 年前

    给定一个偶数行的文件,一个 从后半部分到上半部分的线交错 一半?例如:

    a
    b
    c
    1
    2
    3
    

    对此:

    a
    1
    b
    2
    c
    3
    

    一个可能的解决办法是把这一半写在 分离文件,然后使用 paste

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

    不过,我想找到一个简单的方法来做这件事

    1 回复  |  直到 6 年前
        1
  •  7
  •   sidyll    6 年前

    这个 :g 命令经常用于迭代行和 迭代文件后半部分的行,同时 将线从上半部分移动到适当的位置 相对位置 :m .

    下半场,这一行必须在第一行之前 :1 m -1 (相对于光标,将行1移动到位置-1)。之后 现在,第1行应该在第2行之前 下半场。因此,这是一个移动光标的问题 重复这个过程,方便地由 :克 . 总之,先跳到第二行的第一行 5 0 % 然后:

    :,$g/^/1m-1
    

    作为一个命令,它将整个块的范围

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

    注: :Interleave 使用 :keeppatterns 从更改中搜索寄存器和历史记录。 :保留模式