vim将正则表达组的所有匹配记录到注册表中

use*_*293 10 regex vim yank regex-group

我知道我可以将所有匹配的行拉入寄存器A,如下所示:

:g/regex/y/A
Run Code Online (Sandbox Code Playgroud)

但我似乎无法弄清楚如何将匹配的正则表达式群体放入寄存器A:

:g/\(regex\)/\1y A
(E10: \ should be followed by /, ? or &)
Run Code Online (Sandbox Code Playgroud)

FDi*_*off 12

您可以使用替换命令执行此操作.

:%s/regex/\=setreg('A', submatch(0))/n
Run Code Online (Sandbox Code Playgroud)

这会将寄存器a附加到正则表达式匹配的任何内容中.该n标志将在沙箱中运行该命令,因此实际上不会替换任何内容,但会发生该语句的副作用.

您可能希望首先清空寄存器

:let @a=''
Run Code Online (Sandbox Code Playgroud)

  • 关于使用大写字母版本的好处是你可以使用`setr​​eg()`的第三个参数来使它成为linewsise.`%s/foo /\= setreg('A',submatch(0),'V')/ n` (4认同)
  • 清除寄存器"a"的更快方法是使用普通模式命令`qaq`. (2认同)