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