2012-10-17 71 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