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