如何使用 vimgrep 来 grep 被 vim 高亮显示的工作?
How to use vimgrep to grep work that's high-lighted by vim?
我安装了 vimgrep 插件,在 vim 里面,在正常模式下我可以输入:
:vimgrep mywords %
搜索"mywords"当前目录下的文件。
但我希望在正常模式下,当我使用 gd 突出显示一个词时,或者在可视模式下使用 'viw' 到 select 一个词时,我使用热键 vimgrep。所以我添加了我的 .vimrc 并重新启动 vim:
vnoremap <F8> :vimgrep expand('<cword>') %<CR>
嗯,这对我不起作用,当我将焦点放在一个词上 select 它时,我按 F8,vim 没有反应。如何实现?
谢谢!
尝试
vnoremap <F8> y:vimgrep "<c-r>"" %<CR>
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>
映射。
我安装了 vimgrep 插件,在 vim 里面,在正常模式下我可以输入:
:vimgrep mywords %
搜索"mywords"当前目录下的文件。
但我希望在正常模式下,当我使用 gd 突出显示一个词时,或者在可视模式下使用 'viw' 到 select 一个词时,我使用热键 vimgrep。所以我添加了我的 .vimrc 并重新启动 vim:
vnoremap <F8> :vimgrep expand('<cword>') %<CR>
嗯,这对我不起作用,当我将焦点放在一个词上 select 它时,我按 F8,vim 没有反应。如何实现?
谢谢!
尝试
vnoremap <F8> y:vimgrep "<c-r>"" %<CR>
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>
映射。