私の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.shtoのすべての出力をリダイレクトします/dev/null。I / Oリダイレクトの詳細については、bashをご覧ください。
:help :execute:help :silent:help :!:help :barexecute "!./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をコンパイルすることをお勧めします。