我正在跟踪史蒂夫·洛什的“学习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。
感谢您的帮助。
答案 0 :(得分:1)
正如benjifisher所注意到的,如果光标下的单词有特殊字符,它们将由Vim解释(例如:如果你的单词包含'%',Vim将用当前文件名替换它)。为避免这种情况,请使用fnameescape
:
:nnoremap <leader>g :exe "grep -R " . shellescape(fnameescape(expand("<cWORD>"))) . " ."<cr>