我希望在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,您可以这样做:
foo%s//\=@a/g(或突出显示一些文字并开始输入:s以仅在该范围内替换)