今更ながらプログラマーならVimが使えないとやっぱりダメだよなーと思ったので、Vimを使うようになってきました。
そこでせっかくなのでいろいろカスタマイズできるVimをPHP用にしてみました。

PHPの関数を補完してくれるようにする

まずはPHPの関数を補完してくれるようにします。

php用の辞書の用意

まず、下記のコマンドを実行します。

php -r '$f=get_defined_functions();echo join("\n",$f["internal"]);'|sort > ~/.vim/dict/php.dict

get_defined_functionsでPHPに定義されている関数を出力してくれるので、こいつをvimの辞書ファイルにぶち込みます。

補完してくれるようにする

.vimrcに

autocmd FileType php,ctp :set dictionary=~/.vim/dict/php.dict

をいれればphpファイルを読み込むときにphpの辞書ファイルを読みこんでくれます。ついでにcakephp用にctpファイルを開くときも補完してくれるようにしておきます。

色が微妙な場合は

highlight Pmenu ctermbg=4
highlight PmenuSel ctermbg=1
highlight PMenuSbar ctermbg=4

これらをいれておくと、いい感じになります。

vimを開いて、:highlightをすると、今設定されているhighlightの一覧がみれるので参考にどうぞ。

最後に下記リンクからacp.vimをもってきて~/.vim/plugin/以下に配置してください。
https://github.com/vim-scripts/AutoComplPop

これで自動補完ができます。

保存するときにシンタックスエラーチェックをする

php -l で確認できるあれをvimを使って保存するときにやったら便利じゃね。
というわけで、例によって.vimrcに追記します。

autocmd FileType php set makeprg=php\ -l\ %
autocmd BufWritePost *.php silent make | if len(getqflist()) != 1 | copen | else | cclose | endif

FileType phpでphpファイルのみを対象にエラーチェックします。set makeprgの値に"php -l"を入れてmakeコマンド実行時のコマンドを設定。

BufWritePost」はファイル保存に発生するイベント。ここではphpファイルの場合にmakeコマンド(php -l)を実行しますよーってことです。

getqflist()で実行結果を取得、len(getqflist())で行数をみてます。php -lをして問題がなければ「No syntax errors」のみの1行だけのはずなので、出力された行数が1行でなければシンタックスエラーあり、ってなりますね。

最後のcopen、closeはmakeコマンド実行時に開いたwindowを開くか、閉じるか。

:wqってやった場合はエラーがあっても終了してしまうので、注意。

おまけ

Vimを使っていると挿入モードで行の一番最後にカーソルを移動させたいことが多々ありまして、どうにかならんかと思ってキーマッピング設定をしました。

:map! <C-e> <Esc>$a
:map! <C-a> <Esc>^a

:map <C-e> <Esc>$a
:map <C-a> <Esc>^a

:map <置き換えられるキー> <新しいキー>の形になります。

<C-e>はCtrlキー+e

<Esc>$aはコマンドラインモードになって$(行末への移動)のあと挿入モードに変更

これを設定しておくとctrlキー+eで行の最後へ、ctrlキー+aで行の最初に移動します。