0

假设我有以下文本。

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
4

1 回答 1

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

于 2013-04-12T04:26:19.327 回答