2014-02-17 2 views
0

나는 인수가 ARG1과 ARG2gvim을 사용자 정의 명령 인수

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

어떻게 액세스합니까 같은 특정 파일 패턴에 패턴을 검색 할 vimgrep 사용하는 사용자 정의 명령을 만들려고 해요?

편집 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이 : 아 그럼, 위의 함수 오류 출력 및 아무것도 <f-args> 및 기능을 사용하여

답변

1

발견되는 새 탭을 열고, 빔 당신을위한 개별 명령 인수를 구문 분석; 이것이 올바른 방법입니다.

:vimgrep에서 오류를 처리하기 위해, 당신은 당신이 검색하기 전에 :tabnew 해야하는 이유 예컨대이 :

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

    echohl ErrorMsg 
    echomsg 'Search failed' 
    echohl None 
endtry 

내가 볼하지 마십시오 execute l:searchCommandtry...catch로 묶어야 할 필요가; 이후에이 작업을 수행하는 경우 (그러나 :cw 이전) 검색이 실패 할 경우 정리할 필요가 없습니다.

+0

아! 선택적으로 세 번째 매개 변수를 기반으로 새 탭에서 결과를 열려고했습니다. vimgrep과 cw 사이에 새로운 탭 삽입! 어떻게 작동합니까? vimgrep에서 아무것도 찾지 못하면 처음에는 tabnew가 오류를 발생시키는 이유는 무엇입니까? – Rnet

+0

나는 그 오류가': vimgrep'; 그러나, 함수 내부의 에러 메시지는 길고 추악하기 때문에': echomsg'가있는 try..catch가 더 좋습니다. –

관련 문제