如何使用vimgrep来点击vim高亮的工作?

时间:2016-11-29 13:50:20

标签: select vim highlight vimgrep

我已经在vim内部安装了vimgrep插件,在正常模式下我可以输入:

:vimgrep mywords %

在“mywords”中搜索当前目录下的文档。

但我希望在正常模式下,当我使用gd突出显示单词时,或者在可视模式下使用'viw'来选择单词时,我会使用热键来进行vimgrep。所以我添加了我的.vimrc并重新启动vim:

vnoremap <F8> :vimgrep expand('<cword>') %<CR>

好吧,它对我不起作用,当我把焦点放在一个单词并选择它时,我按F8,在vim中没有响应。如何实现呢?

谢谢!

2 个答案:

答案 0 :(得分:2)

Vimscript的评估方式与:命令行中输入的Ex命令完全相同。 ex中没有变量,因此无法指定它们。以交互方式键入命令时,您可能使用<C-R>=插入变量内容:

:vimgrep <C-R>=expand('<cword>')<CR> '%'<CR>

...但在脚本中,必须使用:execute。必须引用Ex命令的所有文字部分(单引号或双引号),然后与变量连接:

execute 'vimgrep' expand('<cword>') '%'

实际上,有一个内置命令可以将当前单词插入命令行::help c_CTRL-R_CTRL-W

:vimgrep <C-R><C-W>

您的映射

你可以使用所有三种方法;让我们使用最后一个:

vnoremap <F8> :<C-u>vimgrep <C-r><C-w> %<CR>

<C-u>清除自动插入的'<,'>范围。

你可能想要什么

使用视觉模式中的当前单词很奇怪。您可能想要搜索当前选择。那没有expand()。最简单的是y ank,正如@ ryuichiro的回答所述:

vnoremap <F8> y:vimgrep /<C-r>"/ %<CR>

仍然遗漏了文字文本(:vimgrep搜索正则表达式模式)以及/分隔符的转义:

vnoremap <F8> y:execute 'vimgrep /\V' . escape(@@, '/\') . '/ %'<CR>

强大的插件解决方案

现在,如果你还想避免默认寄存器的破坏,它会变得非常复杂。看看我的GrepHere plugin;它提供了{Visual}<A-M>映射。

答案 1 :(得分:1)

尝试

vnoremap <F8> y:vimgrep "<c-r>"" %<CR> 

推荐阅读:Mapping keys in Vim - Tutorial (Part 1)