vim - 如何将所有匹配行拉入一个缓冲区?

标签 vim

如何将所有匹配的行拉入缓冲区?

给定一个如下文件:

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/

相关文章:

Vim 状态行 : show the character itself

vim - 从 Vim 中的用户定义命令切换到 **插入** 模式

linux - gvim 中的自定义热键

vim - 在 vim 中匹配 Python 注释 block 内太长的行

vim - 在 vim 中禁用单个文件的 pylint

node.js - EC2 cron 作业未执行我的 Node.js 脚本

vim - 在 Vim 中映射 Esc 键

vim - 如何驯服 vim 的 ":find"命令

vim - 独立映射 <C-i> 和 <Tab>

VIM 搜索以 & 开头的字符