如何将所有匹配的行拉入缓冲区?
给定一个如下文件:
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=""
或 qaq
(即,记录空宏)。
当然,您可以将其与任何命名寄存器一起使用。
<小时/>关于vim - 如何将所有匹配行拉入一个缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1474966/