私のvimrcでオートコマンドが定義されています:
au BufWritePost * !./make.sh
スクリプトmake.sh
は.tex
ファイルを3回コンパイルしますが、出力を表示したくありません。
出力を抑制する方法はありますか?
コマンドのsilent
前に1行追加しようとしましたau
が、機能しませんでした。私もこの方法で成功しませんでした。
私のvimrcでオートコマンドが定義されています:
au BufWritePost * !./make.sh
スクリプトmake.sh
は.tex
ファイルを3回コンパイルしますが、出力を表示したくありません。
出力を抑制する方法はありますか?
コマンドのsilent
前に1行追加しようとしましたau
が、機能しませんでした。私もこの方法で成功しませんでした。
回答:
サイレントは前!./make.sh
ではなく前に行くべきau
です。silent
前に置くau
ことは、オートコマンドをサイレントに登録することを意味します。代わりに次のようになります。
au BufWritePost * silent! !./make.sh
コマンドでこのような外部コマンドを実行する際の問題の1つ: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
toのすべての出力をリダイレクトします/dev/null
。I / Oリダイレクトの詳細については、bashをご覧ください。
: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
すると、クイックフィックスリストと呼ばれるリストにエラーを収集できます。クイックフィックスを使用すると、ファイル内のエラー間を移動できるので、コンパイラーがエラーが表示されている場所にすぐにジャンプできます(便利ですか?)。
実行:make
するとmakeプログラムが実行され'makeprg'
ます。次に、出力を解析し、'errorformat'
各エントリをクイックフィックスリストに入れます。
通常は、'makeprg'
デフォルトでmake
コマンドを実行しMakefile
ます。ただし'makeprg'
、:compiler
コマンドを使用して変更することも、直接設定することもできます。
に追加の引数を渡すこともできます:make
。例えば:make clean
注:実行:make
すると、多くの場合、画面の下部にコマンドの出力が表示され、Enterキーを押すよう求めるプロンプトが表示されます。すべての出力がクイックフィックスリストで利用可能になるので、単にEnterを押してください。これは:silent
、などで抑制でき:silent make
ます。
サイレントメイクの一般的なカスタムコマンドは次のとおりです。
command -nargs=* -bar Smake silent make <args> <bar> cwindow
:make
クイックフィックスリストを実行すると、コンパイラの出力が保持されます。
次のコマンドを使用して、クイックフィックスリストをナビゲートします。
:copen
クイックフィックスウィンドウを開く:cclose
クイックフィックスウィンドウを閉じる:cnext
/ :cprev
次/前のアイテムに移動する:cc
現在のエラーを下部に出力するか:cc 3
、この例3で特定のエラーを表示する個人的に私はティム教皇の使用健常 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
、自分のワークフローにクイックフィックスを統合します。ビルドプロセスの出力をキャプチャし、エラーをキャプチャすると、投資に見合うだけの価値があると思います。追加のボーナスとして、quickfixリストをより快適に使用できるようになり、リストをなどの他のアプリケーションに使用できます:grep
。
詳細については、以下を参照してください。
:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc
:make
はこれに答えている間考えましたが、私はそれを含めませんでした。make foreをコンパイルすることをお勧めします。