在 Vim 中选择所有匹配的文本?

Mar*_*ett 6 vim regex

我有一堆数据,我想将与以下正则表达式匹配的所有内容都提取到寄存器中:

/'user': '[a-Z]*'
Run Code Online (Sandbox Code Playgroud)

有没有办法将所有匹配项复制到香草 vim 中的寄存器?我看过这个问题,但它只对一个结果有效,按“n”转到下一个结果后,它将再次使用“//e”并转到下一个结果的末尾,而不是开始。

我也看过这个 SO question。这几乎正​​是我正在寻找的,除了我无法弄清楚如何更改它以使用特定匹配而不是它们所在的行。

Chr*_*ndt 10

这可以简单地通过运行:s带有n标志集的命令来实现(基本上是说,不替换任何内容(但通过\=在替换部分使用 ,您仍然可以捕获匹配项(请参阅 参考资料:h sub-replace-special)。首先让我们清除寄存器 A:

qaq
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令将您的机器捕获到寄存器 a 中:

:%s/'user': '[a-Z]*'/\=setreg('A', submatch(0), 'V')/gn
Run Code Online (Sandbox Code Playgroud)

并粘贴您的匹配项:

:put A
Run Code Online (Sandbox Code Playgroud)

这至少需要 Vim 7.4(我忘记了实际的补丁号)。


Ing*_*kat 0

您可以使用:YankMatches我的ExtractMatches 插件中的命令:

:%YankMatches /'user': '[a-Z]*'/
Run Code Online (Sandbox Code Playgroud)

默认情况下,每个匹配项都会换行;要使用另一个分隔符,有另一种形式。


归档时间:

查看次数:

7037 次

最近记录:

11 年,2 月 前