我有一堆数据,我想将与以下正则表达式匹配的所有内容都提取到寄存器中:
/'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(我忘记了实际的补丁号)。
您可以使用:YankMatches我的ExtractMatches 插件中的命令:
:%YankMatches /'user': '[a-Z]*'/
Run Code Online (Sandbox Code Playgroud)
默认情况下,每个匹配项都会换行;要使用另一个分隔符,有另一种形式。
| 归档时间: |
|
| 查看次数: |
7037 次 |
| 最近记录: |