代码之家  ›  专栏  ›  技术社区  ›  Paul Wicks asgeo1

如何在VIM中检索当前搜索的文本?

  •  4
  • Paul Wicks asgeo1  · 技术社区  · 15 年前

    例如,我有一些代码,我使用“*”来搜索代码中的内容。在那个文件里找不到我想要的,我想用 ack grep 在本地目录中搜索。我知道我能做到 :! ack whatever 从Vim内部进行搜索,但我想知道的是,是否有一种方法可以替换 whatever 和当前在vim中搜索的单词。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Community Mohan Dere    8 年前

    折断 Tim Henigan's answer 把这个放在你的.vimrc里

    cmap <C-R>/ <C-R>=substitute(substitute(@/, '^\\<', '', ''), '\\>$', '', '')
    

    现在当你击中 CTRL-R / 在命令行模式下,它将删除单词boundry markers,因此您应该能够使用

    :!grep CTRL-R / file-list
        2
  •  4
  •   Community Mohan Dere    8 年前

    可以使用ctrl-r后跟/插入最后一个搜索寄存器。

    :!grep <Ctrl-r> / file_list
    

    看到这个 Vim Tips Wiki 输入以获取更多信息。

    更新:
    这个 * 搜索命令命令总是包含单词边界。

    然而, g* 搜索命令的行为与 * ,但没有文字界限。

    这可用于解决您的问题,而不是在 rampion's answer .

        3
  •  1
  •   John Weldon user3678248    15 年前

    我还没有找到一种将搜索寄存器的内容传递给外部程序的方法,而不需要使用键映射和eval语句。

    但是,您可以使用 <cword> 要将光标下当前的单词传递给外部程序:

    :!echo <cword>
    

    :!ack <cword>
    
        4
  •  0
  •   ThePosey    15 年前

    您可以将该单词拉入寄存器,并在命令模式行中使用@regnum

    “1YW :!GRP@ 1