代码之家  ›  专栏  ›  技术社区  ›  pkit

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

vim
  •  24
  • pkit  · 技术社区  · 15 年前

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

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

    可以使用寄存器作为 代替 图案,像这样

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

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

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

    it输出

    E64: \= follows nothing
    E476: Invalid command
    
    3 回复  |  直到 15 年前
        1
  •  12
  •   DrAl    15 年前

    我不认为这是可能的,但是你可以用 :exe 要做到这一点:

    :exe '%s/' . @a . '/foo/g'
    
        2
  •  13
  •   Benoit    15 年前

    在一个模式中(不是替换部分), \= 表示0或1次(它是 \? 应优先考虑出售 因为后者意味着 ? 当你回头看的时候。

    :help /\= help pattern 更多细节。

    let @/=@a
    %s//foo/g
    
        3
  •  11
  •   Nathan Long    13 年前

    你可以用 / 登记

    这并不能解决一般的问题,但在我看来 register在这方面很特别:如果您将搜索词留空,它将使用 / 登记;也就是说,你最后找的东西。

    所以如果你想替换 foo 内容包括 @a ,您可以这样做:

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