假设我有以下文字。
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
答案 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
完成。