내 vimrc에 자동 명령이 정의되어 있습니다.
au BufWritePost * !./make.sh
이 스크립트 make.sh
는 .tex
파일을 3 번 컴파일 하고 출력을 표시하고 싶지 않습니다.
출력을 억제하는 방법이 있습니까?
명령 silent
앞에 한 줄 을 추가하려고했지만 au
작동하지 않았습니다. 나는 또한 성공하지 않고이 방법 을 시도했다 .
내 vimrc에 자동 명령이 정의되어 있습니다.
au BufWritePost * !./make.sh
이 스크립트 make.sh
는 .tex
파일을 3 번 컴파일 하고 출력을 표시하고 싶지 않습니다.
출력을 억제하는 방법이 있습니까?
명령 silent
앞에 한 줄 을 추가하려고했지만 au
작동하지 않았습니다. 나는 또한 성공하지 않고이 방법 을 시도했다 .
답변:
침묵은 이전 !./make.sh
이 아니라 이전에 가야 au
합니다. silent
앞에 두는 au
것은 자동 명령을 자동으로 등록한다는 의미입니다. 대신 다음과 같아야합니다.
au BufWritePost * silent! !./make.sh
이 명령으로 이와 같은 외부 명령을 실행할 때의 한 가지 문제 :silent
는 화면이 다시 그려지지 않아 빈 화면이 남는 것입니다. 그러나 vim에는 다음과 같이 사용할 수있는 화면을 다시 그리는 명령이 있습니다.
au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!
execute 명령을 사용해야하는 이유는 :!
명령에서 찾은 문자를 사용 silent! !./make.sh | redraw!
하기 때문입니다. 이는 bash가 이후의 모든 문자를 해석하려고하기 때문에 수행 할 수 없었 음을 의미 !
합니다.
참고 :silent!
반면, 오류 메시지를 무시는 :silent
하지 않습니다. 또한이 >/dev/null 2>&1
부품은의 모든 출력을 !./make.sh
로 리디렉션합니다 /dev/null
. bash에서 I / O 리디렉션에 대한 자세한 내용은 here을 참조하십시오 .
:help :execute
:help :silent
:help :!
:help :bar
execute "!./make.sh"
에 execute "!./make.sh >/dev/null 2>&1"
도움? 명령의 모든 출력이로 리디렉션됩니다 /dev/null
. bash에서의 경로 재 지정에 대한 자세한 정보는 tldp.org/LDP/abs/html/io-redirection.html 을 읽으십시오 .
직접 질문에 대한 답변은 @EvergreenTree가 게시 한 것과 같습니다. 그러나 프로젝트를 빌드 / 컴파일 / 린팅하기위한 Vim 내장 도구가없는 것 같습니다. 가장 주목할만한 :make
것과 빠른 수정 사항 목록입니다.
:make
하면 무엇을 얻을 수 있습니까?를 사용 :make
하면 오류를 Quickfix 목록이라는 목록으로 수집 할 수 있습니다. 퀵 픽스를 사용하면 파일의 오류 사이를 탐색 할 수 있으므로 컴파일러가 오류가 있다고 말하는 곳으로 바로 이동합니다 (잘 되었습니까?).
실행 :make
하면 make 프로그램이 실행 됩니다 'makeprg'
. 그런 다음 출력을 구문 분석하고 'errorformat'
각 항목을 빠른 수정 사항 목록에 넣으십시오.
일반적 'makeprg'
으로을 make
실행하는 명령이 기본값 Makefile
입니다. 그러나 명령을 'makeprg'
통해 변경 :compiler
하거나 직접 설정할 수 있습니다.
에 추가 인수를 전달할 수도 있습니다 :make
. 예 ::make clean
참고 : running :make
은 종종 화면 하단에 명령의 출력을 보여주고 Enter를 누르라는 프롬프트를 표시합니다. 빠른 수정 사항 목록에서 모든 출력을 사용할 수 있으므로 Enter를 누르십시오. :silent
예 를 들어을 통해이를 억제 할 수 있습니다 :silent make
.
자동 작성에 대한 일반적인 사용자 정의 명령은 다음과 같습니다.
command -nargs=* -bar Smake silent make <args> <bar> cwindow
:make
quickfix list 를 실행하면 컴파일러의 출력이 유지됩니다.
다음 명령을 사용하여 빠른 수정 사항 목록을 탐색하십시오.
:copen
빠른 수정 창을 열려면:cclose
빠른 수정 창을 닫으려면:cnext
/ :cprev
다음 / 이전 항목으로 이동:cc
:cc 3
이 예에서 현재 오류를 맨 아래에 인쇄하거나 특정 오류를 표시합니다.개인적으로 나는 Tim Pope의 손상되지 않은 플러그인을 사용하여 quickfix 목록을 탐색합니다.
:make
자동 및 자동 실행은 어떻습니까?:autocmd
어디에서나 똑같이 할 수 있습니다 .
augroup auto_make
autocmd!
autocmd BufWritePost * silent make
autocmd QuickFixCmdPost *make* cwindow
augroup END
보너스로 :cwindow
오류가있는 경우 빠른 수정 창을 열 때 추가했습니다 .
참고 : BufWritePost
관련없는 파일이 빌드되지 않도록 autocmd 에서 해당 파일 패턴에 대해보다 구체적이어야 합니다.
이것은 몇 가지 Vim의 내장 명령과 몇 가지 autocmd를 사용하여 확신합니다. 물론 당신을 도울 수있는 플러그인과 도구가 있습니다
:make
작업을 비동기 적 으로 실행할 수 있습니다 .:write
../script.sh
이 매우 복잡 하지 않으면 당신 은 make를 사용하여보고 싶을 수도 있습니다. 나중에 더 많은 작업을 확장 할 수 있으며 일반적인 빌딩 도구입니다.개인적으로 나는 :make
자신의 워크 플로우에 퀵 픽스를 통합했다 . 빌드 프로세스의 출력을 캡처하고 오류를 캡처하는 것이 투자 가치가 있다고 생각합니다. 추가 보너스로 빠른 수정 목록에 더 익숙해지며 같은 다른 응용 프로그램에이 목록을 사용할 수 있습니다 :grep
.
자세한 내용은 다음을 참조하십시오.
:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc
:make
이것에 대답하는 동안 생각 했지만 그것을 포함시키지 않았다. 컴파일하기 전에 make를 사용하는 것이 좋습니다.