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

时间:2010-04-29 16:44:35

标签: vim vi

例如,我有一些代码,我使用“*”来搜索该代码中的内容。我没有在该文件中找到我想要的内容,我想使用ackgrep之类的内容在本地目录中搜索它。我知道我可以{vi}来:! ack whatever进行搜索,但我想知道的是有一种方法可以将whatever替换为vim中当前搜索的单词。

4 个答案:

答案 0 :(得分:4)

您可以使用Ctrl-r,然后使用/来插入最后搜索寄存器。

:!grep <Ctrl-r> / file_list

有关详细信息,请参阅此Vim Tips Wiki条目。

<强>更新
*搜索命令命令始终包含单词边界。

但是,g*搜索命令与*的行为相同,但没有字边界。

这可以用来解决您的问题,而不是使用rampion's answer中的自定义宏。

答案 1 :(得分:1)

我没有找到一种方法(轻松)将搜索寄存器的内容传递给外部程序,而无需借助键映射和eval统计。

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

:!echo <cword>

:!ack <cword>

答案 2 :(得分:1)

匆匆离开Tim Henigan's answer,将其放入.vimrc

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

现在,当您在命令行模式下点击CTRL-R /时,它会删除单词边界标记,因此您应该可以使用

:!grep CTRL-R / file-list

答案 3 :(得分:0)

您可以将单词拉入注册表并在命令模式行中使用@regnum

“1yw :!grep @ 1