今更ながらプログラマーなら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で行の最初に移動します。