我希望在Vim中使用寄存器的内容作为搜索模式。
我想从命令行执行此操作,因此我无法使用<c-r>
语法,因为它假设了一个交互式会话。
可以将寄存器用作替换模式,如此
:%s/foo/\=@a/g
但是,将此语法用作搜索模式不起作用
:%s/\=@a/foo/g
输出
E64: \= follows nothing
E476: Invalid command
答案 0 :(得分:12)
在模式(不是替换部分)中,\=
代表“0或1次”(它是\?
的同义词,因为后者优先于\?
是指向后看时的文字?
。
有关详细信息,请参阅:help /\=
和help pattern
。
为什么不:
let @/=@a
%s//foo/g
答案 1 :(得分:11)
我认为这不可能直接,但您可以使用:exe
来实现这一目标:
:exe '%s/' . @a . '/foo/g'
答案 2 :(得分:10)
/
寄存器这并不能解决一般问题,但在我看来/
寄存器在这方面是特殊的:如果你将搜索词留空,它将使用{{1}中的任何内容注册即你最后搜索的内容。
因此,如果您想将/
替换为foo
的内容,则可以执行以下操作:
@a
foo
(或突出显示一些文字并开始输入%s//\=@a/g
以仅替换该范围内)