2014-02-17 74 views
0

我試圖創建一個自定義命令使用使用vimgrep像GVIM自定義命令參數

:command -nargs=* Find :tabnew <bar> vimgrep /<arg1>/gj <arg2> <bar> cw <cr> 

如何訪問給定文件搜索模式的模式參數ARG1和ARG2?

編輯1:我想出了以下解決方案

command! -nargs=* Find call VimFind(<f-args>) 
function! VimFind(searchPattern,filePattern,...) 
    let searchCommand = 'vimgrep /'.a:searchPattern.'/gj '.a:filePattern.'|cw' 
    if a:0 > 0 && a:1 == 'n' 
    let searchCommand = 'tabnew|'.l:searchCommand 
    endif 
    execute l:searchCommand 
endfunction 

有一個更清潔的方式做到這一點?

編輯2:不錯啊,上面的功能出現了錯誤,然後打開時,沒有發現

回答

1

通過使用<f-args>和功能的新標籤頁時,Vim解析對您個人的命令參數;這是一個正確的方法來做到這一點。

處理錯誤從:vimgrep,你必須附上execute l:searchCommandtry...catch,例如:

try 
    execute l:searchCommand 
catch /^Vim\%((\a\+)\)\=:E/ 
    tabclose 

    echohl ErrorMsg 
    echomsg 'Search failed' 
    echohl None 
endtry 

我不明白爲什麼你需要搜索之前:tabnew;如果你以後這樣做(但在:cw之前),如果搜索失敗,則不必清理。

+0

啊!我想要根據第三個參數在一個新選項卡中打開結果。把選項卡放在vimgrep和cw之間!這個怎麼用?爲什麼tabnew在開始時會給出一個錯誤,如果vimgrep沒有找到任何東西? – Rnet

+0

我很確定這個錯誤來自':vimgrep';然而,函數內部的錯誤信息很長很醜,所以try..catch用':echomsg'更好。 –