2012-05-24 4 views
8

나는 나를 위해 몇 가지 물건을 컴파일하는 Vim에서 함수를 만들었다. 너무 다음과 같습니다퀵 픽스 윈도우의 빔 파일 경로

function! MyFunc(mode) 
    lcd ./build 
    pwd 
    let &makeprg='the_command some_script_file' 
    let &errorformat='some format'.',' 
    let &errorformat.='%-G%.%#' 
    silent make 
    lcd .. 
    cwindow 
endfunction 

내가 프로젝트 디렉토리에 일반적으로 열려 정력, 나는 그래서 난 내 프로젝트 디렉토리에 남아이 그것을 빌드 빌드에 CD를의 기능 및 CD의 뒷면을 실행할 수 있습니다.

그러나 때때로 빌드가 실패하고 퀵 픽스 창을 가져 오면 내 프로젝트 디렉토리 (yay)에 상대적인 파일 이름이 표시되지만 다른 파일에는 동일한 경로가 표시됩니다. 빌드 스크립트의 출력 결과는 항상 상대 경로를 나타내며 vim은 올바르게 처리합니다. 즉, 올바른 파일을 찾습니다.

경로 처리가 문제가 아닌 것으로 생각됩니다. 제 질문은 무엇이 문제이며 빌드 디렉토리로 전환하고 다시 처리하는 더 좋은 방법이 있습니까? 나는 항상 상대 경로를 보여주고 싶다.

감사합니다.

답변

3

나는 이것이 lcd과 관련이 있다고 생각합니다. 함수에서 퀵 픽스 창이 열리면 현재 창에서 로컬 디렉토리를 상속받습니다. 그러나 퀵 픽스 창이 다른 곳에서 (또는 함수를 실행하기 전에) 열리면 전역 작업 디렉토리가 유지됩니다. 불일치가있을 때 Vim은 절대 경로를 표시해야합니다.

정말로 :lcd을 사용해야하는 경우 위치 목록 (:lmake)을 사용하는 것이 더 좋을 것입니다. 그 이유는 창에도 로컬이기 때문입니다. 하지만 스위치는 임시적인 것일 뿐이므로 지금까지 실제 실제 값을 복원하는 것에 신경 쓰지 않으므로 먼저 글로벌 :cd을 사용하려고합니다.

+0

사실입니다. 나는 그 장면을 나중에주고 다시보고 할 것이다. – Christoph

0

Ingo가 지적했듯이 경로는 이전 창에서 상속 된 퀵 픽스 창의 현재 디렉토리를 기준으로합니다.

autocmd QuickFixCmdPre을 사용하여 make를 실행하기 전에 올바른 경로를 설정할 수 있습니다. 추가 Project Root plugin 사용하는 경우

당신의 .vimrc에 다음이 (당신은 또한 다른 명령의 수를 지정할 수 있습니다 :make에 의해 작성되기 전에

augroup changeQfCmdDir 
    au! 
    autocmd QuickFixCmdPre make ProjectRootCD 
augroup END 

, 다음 quickfix 윈도우의 경로가 수정 될 것이다 quickfix 창을 사용합니다 : grep,lgrep,cscope).