如何提取带有模式的行并将它们放在文件的末尾

时间:2013-04-12 04:16:12

标签: vim

假设我有以下文字。

a test1
b test2
a test3
b test4

用于提取以字母a开头的行并将它们放在文件末尾的命令是什么?

b test2
b test4

a test1
a test3

当我使用:g / ^ a / d和p时,粘贴唯一的最后一个匹配:

b test2
b test4

a test3

1 个答案:

答案 0 :(得分:5)

您最后只看到a test3,因为:d设置(不附加)默认寄存器。由于:g每行与模式匹配一​​次执行给定命令,因此粘贴时只有最后一行在默认寄存器中。

执行此操作的规范方法是使用:move(缩写为:m)命令 - :g/^a/m $。对于匹配^a的每一行,请将其移到最后一行($)。

对初始方法稍作修改,就是将:d附加到寄存器中,然后粘贴该寄存器。

:let @a=''  " Clear register a
:g/^a/d A   " For every line that matches ^a, delete it
            " and append the contents to register a
:$put a     " Paste the contents of register a after the last line

最后一部分也可以使用普通模式命令"ap完成。