vim autocomand의 출력 억제


13

내 vimrc에 자동 명령이 정의되어 있습니다.

au BufWritePost * !./make.sh

이 스크립트 make.sh는 .tex파일을 3 번 컴파일 하고 출력을 표시하고 싶지 않습니다.

출력을 억제하는 방법이 있습니까?

명령 silent앞에 한 줄 을 추가하려고했지만 au작동하지 않았습니다. 나는 또한 성공하지 않고이 방법 을 시도했다 .

답변:


20

침묵은 이전 !./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

두 번째 명령은 여전히 ​​화면에 출력을 인쇄하지만 작동했습니다. 또한 스크립트가 더 이상 종료되면 Enter 키를 누를 필요가 없습니다. 그러나 출력을 완전히 억제하는 방법이 있는지 궁금합니다.
— Andre Herman Bezerra

1
교체 하는가 execute "!./make.sh"에 execute "!./make.sh >/dev/null 2>&1"도움? 명령의 모든 출력이로 리디렉션됩니다 /dev/null. bash에서의 경로 재 지정에 대한 자세한 정보는 tldp.org/LDP/abs/html/io-redirection.html 을 읽으십시오 .
— EvergreenTree

나는 그것을 생각해야했다! 효과가있다. 감사!
— Andre Herman Bezerra

7

직접 질문에 대한 답변은 @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

퀵 픽스 목록

:makequickfix 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를 사용하여 확신합니다. 물론 당신을 도울 수있는 플러그인과 도구가 있습니다

  • Dispatch.vim 을 사용하여 :make작업을 비동기 적 으로 실행할 수 있습니다 .
  • Syntastic 플러그인 구문은 이후 파일을 확인합니다 :write.
  • Ale.vim (Asynchronous Lint Engine)은 텍스트 파일을 편집하는 동안 NeoVim 및 Vim 8에서 보푸라기를 제공하기위한 플러그인입니다.
  • Unimpaired.vim을 사용하면 빠른 수정 목록을 쉽게 관리 할 수 ​​있습니다.
  • 평범한 오래된 Makefile. 당신 ./script.sh이 매우 복잡 하지 않으면 당신 은 make를 사용하여보고 싶을 수도 있습니다. 나중에 더 많은 작업을 확장 할 수 있으며 일반적인 빌딩 도구입니다.
  • Vim Awesome 을 사용하면 도움이 될 수있는 더 많은 플러그인을 검색 할 수 있습니다.

결론

개인적으로 나는 :make자신의 워크 플로우에 퀵 픽스를 통합했다 . 빌드 프로세스의 출력을 캡처하고 오류를 캡처하는 것이 투자 가치가 있다고 생각합니다. 추가 보너스로 빠른 수정 목록에 더 익숙해지며 같은 다른 응용 프로그램에이 목록을 사용할 수 있습니다 :grep.

자세한 내용은 다음을 참조하십시오.

:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc

나는 :make이것에 대답하는 동안 생각 했지만 그것을 포함시키지 않았다. 컴파일하기 전에 make를 사용하는 것이 좋습니다.
— EvergreenTree

특정 파일에서만 makeprg를 실행하도록 autocmd를 변경하는 방법
— Ibn Saeed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.