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

时间:2010-10-13 09:44:04

标签: vim

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

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

可以将寄存器用作替换模式,如此

:%s/foo/\=@a/g

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

:%s/\=@a/foo/g 

输出

E64: \= follows nothing
E476: Invalid command

3 个答案:

答案 0 :(得分:12)

在模式(不是替换部分)中,\=代表“0或1次”(它是\?的同义词,因为后者优先于\?是指向后看时的文字?

有关详细信息,请参阅:help /\=help pattern

为什么不:

let @/=@a
%s//foo/g

答案 1 :(得分:11)

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

:exe '%s/' . @a . '/foo/g'

答案 2 :(得分:10)

您可以使用/寄存器

执行此操作

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

因此,如果您想将/替换为foo的内容,则可以执行以下操作:

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