繁体   English   中英

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

[英]How to use vimgrep to grep work that's high-lighted by vim?

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

:vimgrep mywords %

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

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

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

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

谢谢!

Vimscript中是完全一样的键入的防爆命令评价:命令行。 ex中没有变量,因此无法指定它们。 以交互方式键入命令时,您可能使用<CR>=来插入变量内容:

: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>

<Cu>清除自动插入的'<,'>范围。

你可能想要什么

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

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

仍然缺少的是文本文本( :vimgrep搜索正则表达式模式)和/ delimiter的转义:

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

强大的插件解决方案

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

尝试

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

推荐阅读: Vim中的映射键 - 教程(第1部分)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM