使用寄存器值作为搜索模式

pki*_*kit 23 vim

我希望在Vim中使用寄存器的内容作为搜索模式.

我想从命令行执行此操作,因此我无法使用<c-r>语法,因为它假设了一个交互式会话.

可以使用寄存器作为替换模式,如下所示

:%s/foo/\=@a/g
Run Code Online (Sandbox Code Playgroud)

但是,将此语法用作搜索模式不起作用

:%s/\=@a/foo/g 
Run Code Online (Sandbox Code Playgroud)

它输出

E64: \= follows nothing
E476: Invalid command
Run Code Online (Sandbox Code Playgroud)

Ben*_*oit 13

在一个模式(不是替换部分)中,\=代表"0或1次"(它\?应该是首选的同义词,\?因为后者?在向后看时意味着文字.

:help /\=help pattern更多的细节.

为什么不 :

let @/=@a
%s//foo/g
Run Code Online (Sandbox Code Playgroud)


DrA*_*rAl 12

我认为这不可能直接,但你可以:exe用来实现这个目标:

:exe '%s/' . @a . '/foo/g'
Run Code Online (Sandbox Code Playgroud)


Nat*_*ong 11

您可以使用/寄存器执行此操作

这并不能解决一般问题,但在我看来,/寄存器在这方面是特殊的:如果你把搜索词留空,它将使用/寄存器中的任何内容; 即你最后搜索的内容.

因此,如果您想要替换foo内容@a,您可以这样做:

  1. 搜索 foo
  2. %s//\=@a/g(或突出显示一些文字并开始输入:s以仅在该范围内替换)