web-dev-qa-db-ja.com

VIM終了時にコマンドを実行し、出力を表示する

PHPスクリプトを編集するために、vimを使用し、vimphp -lファイルに対して*.phpを自動的に実行するようにしたい構文チェックを行うために終了します。このautocmdを~/.vimrcファイルに設定しました。

autocmd VimLeave *.php :!php -l %

私が期待しているのは、次のメッセージのいずれかです。

No syntax errors detected in (file).

...または構文チェック中に発生した解析エラー。しかし、何も表示されません。

上記のコマンドを、autocmdが実際に実行されていることを証明するもの(echo % >> /tmp/vimtestなど)に置き換えると、ファイルが作成され、正しい情報が追加されていることがわかります。何かを出力するだけの何か(echo hello worldなど)に置き換えると、何も得られません。したがって、php -lコマンドが実行されていると想定することしかできませんが、vimは出力を表示しません。

私はvimscriptについてほとんど何も知らず、autocmdsを使ったことがないので、ここで設定できるフラグがあり、終了時にコンソールに出力が表示されることを期待しています。

3
Nick Coons

私はこれが私が望んでいたように機能しない理由を理解しました。出力はコンソールにエコーされますが、vimが終了すると、エコーされたものがすべて削除されるため、表示されません。これはこれで実証することができます:

autocmd VimLeave *.php :!echo Hello; sleep 5

私はそれを5秒間見ることができ、それからそれはクリアされてプロンプトに戻ります。私はこのようなことをすることができると思いました:

autocmd VimLeave *.php :!php -l %; sleep 5

これは機能しますが、PHPファイルの編集を終了するたびに5秒間のスリープが作成されます。ファイルからCtrl-Cできますが、それを取得するのは悪い習慣です。ファイルを終了してエラーが発生しない場合の95%に、別のステップを追加します。sleep 5sleep 1に変更して、それほど長く待つ必要がないようにすることを考えました。これらの場合ですが、実際のエラーを表示するのに1秒しかかからないため、適切ではない可能性があります。

だから私はもう少し複雑なものを書いた:

autocmd VimLeave *.php :!php -l % &> /dev/null; if [ $? -ne 0 ]; then ERRORS=$(( php -l % ) 2>&1 ); clear; printf "\n************************************ ERRORS ************************************\n$ERRORS\n********************************************************************************\n"; sleep 10; fi;

これは次のことを行います。

エラーがない場合は、通常どおり終了し、特別な出力は表示されません。エラーがある場合は、次のような適切にフォーマットされたエラー表示が表示されます。

************************************ ERRORS ************************************
PHP Parse error:  syntax error, unexpected 'include' (T_INCLUDE) in file.php on line 4

Parse error: syntax error, unexpected 'include' (T_INCLUDE) in AMI.php on line 4
Errors parsing file.php
********************************************************************************

このエラーを表示する前に画面をクリアし、10秒間待機します。これにより、エラーを表示して理解するのに十分な時間が与えられます。 10秒が経過する前に終了した場合は、いつでもCtrl-Cを表示から外すことができます。 Ctrl-Cが終了するか、10秒が経過すると、vimを終了するときに通常表示されるのと同じように、vimを開く前に表示したメインコンソールに戻ります。これらの変更のいずれか。

これはおそらくautocmd関数にできるので、その方法を学ぶ価値があると思った場合は、.vimrcファイル内が少しきれいになります。

2
Nick Coons