VIM grep与shellescape一起使用(展开(“

时间:2014-02-19 20:29:55

标签: vim grep

我正在跟踪史蒂夫·洛什的“学习vimscript”。

我在第32章并尝试实现以下grep重映射:

    :nnoremap <leader>g :exe "grep -R " . shellescape(expand("<cWORD>")) . " ."<cr>

目标是在当前文件夹中的光标下grep WORD。

我对这个重映射有一个非常奇怪的问题,只有当我在一行的第一个单词中使用它时它才有效。如果我尝试将光标放在行中的任何其他单词上方,则会生成vim E40错误。

如果我使用相同的重映射但是在一个单词而不是WORD中,如下所示:

    :nnoremap <leader>g :exe "grep -R " . shellescape(expand("<cword>")) . " ."<cr>

它在每一行中都没有问题!

我在Windows上使用VIM 7.4。 我的grepprg设置为gnu grep for windows。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

正如benjifisher所注意到的,如果光标下的单词有特殊字符,它们将由Vim解释(例如:如果你的单词包含'%',Vim将用当前文件名替换它)。为避免这种情况,请使用fnameescape

:nnoremap <leader>g :exe "grep -R " . shellescape(fnameescape(expand("<cWORD>"))) . " ."<cr>