如何将所有匹配的行拉入缓冲区?
给定一个如下文件:
match 1
skip
skip
match 2
match 3
skip
我希望能够发出一个命令将与模式匹配的所有行(在本例中为 /^match/ )提取到单个缓冲区中,以便我可以将其放入另一个文档中,或者放入摘要或其他内容中。
该命令应该在缓冲区中结束:
match 1
match 2
match 3
我的第一个想法是尝试:
:g/^match/y
但我刚刚得到最后一场比赛。这是有道理的,因为 :g 命令有效地重复了y
对于每个匹配行。
也许有一种方法可以将复制附加到缓冲区,而不是覆盖它。我找不到它。
:g/^match/yank A
这将运行全局命令来提取任何匹配的行^match
并将其放入寄存器中a
。因为a
是大写的,而不是仅仅将寄存器设置为该值,而是附加到该值。由于全局命令针对所有匹配行运行该命令,因此您将得到所有相互附加的行。
这意味着您可能希望在开始之前将寄存器重置为空字符串::let @a=""
or qaq
(即录制一个空宏)。
当然,您可以将其与任何命名寄存器一起使用。
- :help registers http://vimdoc.sourceforge.net/htmldoc/change.html#registers
- :help quote_alpha http://vimdoc.sourceforge.net/htmldoc/change.html#quote_alpha
- :help global http://vimdoc.sourceforge.net/htmldoc/repeat.html#:global
- 使用 Vi/Vim:Ex 和类似 Ex 的命令 https://www.sbf5.com/%7Ecduan/technical/vi/vi-2.shtml
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)