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
正如@ryuichiro 的回答所概述的那样,最简单的是ank:
vnoremap <F8> y:vimgrep /<C-r>"/ %<CR>
仍然缺少文字文本(:vimgrep
搜索正则表达式模式)和/
分隔符的转义:
vnoremap <F8> y:execute 'vimgrep /\V' . escape(@@, '/\') . '/ %'<CR>
强大的插件解决方案
现在,如果您还想避免破坏默认寄存器,它会变得非常复杂。看看我的GrepHere 插件;它{Visual}<A-M>
为此提供了一个映射。