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.