Vim 如何提取带有图案的线条并将其放在文件末尾
假设我有下面的文本Vim 如何提取带有图案的线条并将其放在文件末尾,vim,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 您在最后只看到test3,因为:d设置(而不是附加)默认寄存器。由于:g对与模式匹配的每行执行一次给定命令,因此粘贴时默认寄存器中只有最后一行 执行此操作的标准方法是使用
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
您在最后只看到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来完成,因为
:d
设置(不是附录),所以最后只会看到一个test3
默认寄存器。由于: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
完成,谢谢!快速提问。g/^a/d a
如何知道将删除的内容放入寄存器“a”中?大写字母a是否表示寄存器“a”。请参阅:帮助引用\u alpha
谢谢!快速提问。g/^a/d a
如何知道将删除的内容放入寄存器“a”中?大写字母a是否表示寄存器“a”。请参见:帮助引用\u alpha