Vimgrep不能正确匹配正则表达式

时间:2012-10-17 00:27:22

标签: vim

如果我这样做:

:vimgrep /do_action\([ ]?'init'/ **/*.php

我得到了

E54: Unmatched \(

但我知道有些文件有匹配的文字。为什么呢?

如果有人能帮助我为cmd + l创建一个键映射,我也将非常感激,这样就可以用“init”替换为光标下的单词来启动此搜索,我从各种来源可以理解。< / p>

2 个答案:

答案 0 :(得分:2)

您无需转义(即可与之匹配。但是你需要转义?以匹配0~1之前的项目。尝试:

:vimgrep /do_action([ ]\?'init'/ **/*.php

答案 1 :(得分:2)

基于kev的回答,这是你的映射:

nnoremap <D-i> :vimgrep //do_action([ ]\?'<c-r>=expand('<cword>')<cr>'/ **/*.php<cr>

但是我建议你不要在映射中使用Command键:它只适用于MacVim,并且在任何可能的地方寻求可移植性都是一个好习惯。

<leader>键非常适合这类事情。

nnoremap <leader>i :vimgrep //do_action([ ]\?'<c-r>=expand('<cword>')<cr>'/ **/*.php<cr>

请参阅:help c_ctrl-r_=:help leader

修改

我在这个上走得太快了。不仅我为kev重新修改你的命令添加了不必要的瑕疵(愚蠢的//),但我没有注意到它可以被简化。这个测试和工作:

nnoremap <leader>i :vim do_action(\s*'<c-r>=expand('<cword>')<cr> **/*.php<cr>

抱歉这个烂摊子。