vimでPHPのシンタックスチェック

最近、PHPなお仕事なんだけど、PHP用のvimの設定を何もしてないので、とても心細い。シンタックスハイライトくらいはデフォルトで用意されてるけど。

開発言語を変えると、エディタの設定も変えなきゃいけないから面倒だ。これは、vimに限らず、emacsでもeclipseでも同じはず。

極力エディタをカスタマイズしない派の人もいるみたいだけど、なんのために、拡張可能なエディタを使ってんだかわからない。メモ帳でも使ってろと言いたい。

サーバ管理を生業としている人は対象外だけど、複数の環境で作業する必要があるからカスタマイズしないという、よくある意見はスルー。そもそも、本番環境とかで開発するべきじゃないし、開発環境であれば、設定ファイルを共有する方法は、今ならいくらでもある。

シェルとエディタはカスタマイズしてなんぼ。どんどんカスタマイズするべきなんだよ。手に馴染むまで。そして、常に進化させる必要がある。現状に満足することはリスクだと思え。

ということで、まずは、PHPのシンタックスチェックを導入してみた。

vimでPHPを編集中、1秒で文法チェックする方法

ここで見つけて便利だなーと思ってたんだけど、しばらく使ってみて、いちいち手動で実行するのが面倒でたまらん。いつのまにか、こんなんじゃ満足できない体になってしまった。こういうのは、保存時に自動的にやるべき派なので、ちょっと修正した。.vimrcに追加すればok。

func PhpLint()
  let rslt = system('php -l '.bufname(''))
  if !strlen(matchstr(rslt, '^No syntax errors detected in .*$'))
    echo rslt
  endif
endfunc
au BufWritePost *.php :call PhpLint()

php -lを実行すると、シンタックスエラーがなくても、冗長なメッセージを吐きやがる。こういうのは、UNIXの哲学に反するし、ウザくてキライ。なので、エラーがあったときだけ通知するようにした。

systemで実行した外部プログラムの終了コードをチェックしたかったんだけど、やりかたがよくわからんかったので、とりあえず、文字列マッチングで対処。納得いかねーけど、まあ、目的のものはできた。

久しぶりに、vimスクリプト書いたけど、相変わらず、いい意味でキモイ。