假设我有以下文本。
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
假设我有以下文本。
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
您只看到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
。