2012-10-17 70 views
0

如果我这样做:使用vimgrep不匹配的正则表达式正确

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

我得到

E54: Unmatched \(

但我知道,有相匹配的文本文件。为什么?

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

回答

2

在千电子伏的回答大厦,这里是你的映射:

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> 

对不起。

+0

这正是我想要的,非常感谢。但仍然有一个问题我无法弄清楚。 :vimgrep单独工作,但是当使用键映射时,我得到错误(我试图自己修复它无济于事):“]?'init'”[新文件] 无法打开文件“]?'init'” E480:不匹配:do_action([ –

+0

请参阅我的编辑。 – romainl

+0

是的,这个工程很棒!谢谢。 –

2

你不需要转义(来匹配它。但是你需要跳过?以匹配0〜1之前的项目。尝试:

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