2010-06-19 3 views
1

Vim에서 make의 반환 코드 "0, 성공하지 못했습니다. 오류가 아닌 경우"를 얻으려고합니다. 특히, 나는 우분투에 있고 v:shell_error을 사용하면 작동하지 않습니다.Vim에서 make에서 Linux 오류 코드 받기

주위 파고와 this question,보고 후에 때문에

shellpipe=2>&1| tee

tee 파이프 만들기 출력을 다시 정력에 내 shellpipe의 설정이 될 것으로 보인다. 쉘은 분명히 tee에서 vim으로 오류 코드를 반환하고 make에서는 오류 코드를 반환하지 않습니다. 대신에 make의 에러 코드를 얻으려면 어떻게해야합니까?

답변

3

사용자 정의 기능을 만들 수 있습니다. 예 : :call system("make > make.out")을 사용하면 출력을 파일로 재 지정합니다. 그 후에 :cf make.out을 사용하여 오류 파일을로드하십시오. 결코 나 자신을 시도하지 않았다. 결국

make의 결과는 단순히 파일 시스템에 결과가 있는지 테스트에 의해 확인 될 수 있습니다. ('|'여기 상징이다 정력의 명령 구분)

:make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif 

지정 키보드 바로 가기로 입력하면 타이핑 할 필요가 없습니다.

P. 나는 보통 경고를 내지 않기 위해 내 프로그램을 만들려고 노력했기 때문에이 문제를 실제로 발견하지 못했다. 무슨 BTW 다른 가능한 해결책으로 이어질 : 단순히 예를 들어 경고 (또는 원하지 않는 출력 줄) 제거하십시오. 'makeprg'을 재정 의하여 make 출력의 grep -v tabooword 실제로 도움말에 설명 된 내용 : :h 'makeprg'.

P.P.S. 나는 VIM을 시작했다. bash를 쉘로도 사용한다면 제공된다. $ {PIPESTATUS [0]}을 (를) 쉘 파이프에 추가하려고 했습니까? 예 :

데비안에서 테스트 한 결과 데비안에서 제대로 작동하는지 테스트했습니다. 더 많은 것을 위해 :h 'shellpipe'.

1

제가 생각할 수있는 유일한 것은 make와 tee를위한 두 개의 래퍼 스크립트를 만드는 것입니다. 나는 쉬운 방법이있을거야,하지만 지금 당신이 시도 할 수 있습니다 :

#!/bin/bash 

tee [email protected] 
return `cat ~/exit_code_cache` # (or do something else with the exit code) 

사용하여 새를 :

#!/bin/bash 

make [email protected] 
echo $? > ~/exit_code_cache 

는 티 래퍼 스크립트를 작성 :

는 메이크업 래퍼 스크립트를 만듭니다 :set makeprg=mymake으로 만들고 티 랩퍼 (shellpipe=2>&1 | mytee)를 사용하는 shellpipe을 설정하십시오.

테스트되지는 않았지만 아이디어는 명확해야합니다. 희망이 도움이됩니다.