如何将所有匹配的线条拉入缓冲区?
给出如下文件:
match 1
skip
skip
match 2
match 3
skip
我希望能够发出命令将所有与模式匹配的行(/ ^匹配/用于此示例)放入单个缓冲区中,以便我可以将其放入另一个文档或摘要或其他任何内容。 / p>
该命令应该在缓冲区中结束:
match 1
match 2
match 3
我的第一个想法是尝试:
:g/^match/y
但我刚拿到最后一场比赛。这是有道理的,因为:g命令有效地为每个匹配行重复y
。
也许有办法将缓冲附加到缓冲区而不是覆盖它。我找不到了。
答案 0 :(得分:82)
:g/^match/yank A
这会运行全局命令来抽取匹配^match
的任何行并将其放入寄存器a
。因为a
是大写的,而不是仅仅将寄存器设置为值,它将附加到它。由于全局命令针对所有匹配行运行命令,因此您将获得彼此附加的所有行。
这意味着您可能希望在开始之前将寄存器重置为空字符串::let @a=""
。
当然,你可以将它与任何命名的寄存器一起使用。
答案 1 :(得分:13)
:help registers
:help quote_alpha
指定大写字母作为注册名称,以便附加到:yank A
。
答案 2 :(得分:8)
哦,我刚刚在评论之后意识到将匹配的行放入临时缓冲区很容易......
:r !grep "pattern" file.txt
一旦你放弃寻找它们,最简单的解决方案就来了。 :)