PHP Advent Calendar 2016 の 8日目のエントリです。
いきなりで申し訳ないのですが、正直に申し上げるとPHPer全員に使っていただきたいエディタは、 PhpStorm + IdeaVIM だと考えています
しかしPhpStormは有料です。会社ではゴリゴリPHP書いてるけど家ではたまーーにしかPHPを触らない人にとってはちょっとお財布への負担が大きいです。
vimであれば、PhpStorm ほど優秀ではありませんが、最低限の補完はできるし無料です。goとPHPといった複数の言語を使っているようなプロダクトでも画面を縦に割って別々の言語を編集できたりします。1
vim はプラグインを入れたり設定を書く事で簡単に拡張できます。vimでPHPを書くために役に立つプラグインはたくさんありますが、今日はその中でも便利なんだけどネット上であまり使ってる話を見ないプラグインを紹介させていただきたいと思います。
1. vim-phpfmt
go 言語を書く時に vim-go プラグインを入れてちょっとセットアップすると、保存したタイミングで自動的にコードフォーマットを修正してくれますよね。自動でフォーマットする事でtabはsoftがいいとかhardがいいとか括弧の位置が…とかいう不毛な争いをなくす事ができて良いです。
PHPで同じ事をするには vim-phpfmt というプラグインを使います。プラグインはパッケージ管理システムを利用すると簡単にインストールできます。
私は Vundle を使っているのですが、 Vundle だとこんな感じです。2
Bundle 'beanworks/vim-phpfmt'
vim-phpfmt はコードフォーマットのお膳立てをしてくれるだけで、実際の整形作業は PHP CodeSniffer が行います。 プラグインの third_party ディレクトリ下に phpcbf.phar が入っているのでそれを使ってもよいですが、composer を使うと簡単に自前でインストールできます。
composer global require "squizlabs/php_codesniffer=*"
$HOME/.config/composer/vendor/bin
に実行ファイルが置かれるのでパスを通せばOKです。
以下のような設定を追加することで、保存時に自動的に PSR2 に変換して保存してくれるようになります。 また、 g:phpfmt_standard
の値を変更する事で他のフォーマットにも対応できます。
""
" vim-phpfmt
"
" A standard type: PEAR, PHPCS, PSR1, PSR2, Squiz and Zend
let g:phpfmt_standard = 'PSR2'
let g:phpfmt_autosave = 1
開いているプロジェクトによってルールが違ったりする事もあると思うので、開いているパスを見るなどして動的に変更するのも良いでしょう。
インデントだけじゃなくて括弧省略したif文なんかも適切に置換してくれるので見てて面白いです。
2. php_localvarcheck
このプラグインはすごいです。ファイル内で未使用変数や未定義変数を動的に検出し、変数名の色を変えて警告してくれます。
言葉で説明するよりも以下の画像を見ていただいたほうが早いでしょう。
ファイル全体のチェックというよりは、カーソルがメソッド内に入るとそのメソッド内での未使用、未定義変数をチェックしてくれるみたいです。
公式にあるものは、Vim7.3あたりで導入された新しい正規表現エンジンに対応できてなくて エラーがでてしまうので、flyinshadow/php_localvarcheck.vimを使うとよいです。
Vundleなら以下の設定を追加すればインストールできます。
Bundle 'flyinshadow/php_localvarcheck.vim'
私はグローバルのチェックは必要ないかなと思ったので以下の設定を追加しています。
let g:php_localvarcheck_enable = 1
let g:php_localvarcheck_global = 0
3. errormarker.vim + vimparse.php
errormarker.vim を使うと、make実行時に発生したコンパイルエラーのメッセージを見て該当行の色付けができたりするのですが、
vimparse.php を使うことで、make時に自動的にlintを行い、エラーが発生したときに errormarker.vim を使ってエラー行を目立つように表示してくれます。
errormarker.vim は 公式サイト からもダウンロードできます。 Vundleなら以下で入ります。
Bundle 'errormarker.vim'
errormarker.vimのインストールができたら次はvimparse.phpです。 vimparse.php は composer 経由でインストールできます。
composer global require ha1t/php-vimparse
インストールができたら vimparse.php を呼べるように $HOME/.config/composer/vendor/bin
にパスを通してください。
そしたら filetype が PHP の時に以下の設定が読まれるようにすればOKです。
if executable('vimparse.php')
setlocal makeprg=vimparse.php\ %\ $*
setlocal errorformat=%f:%l:%m
setlocal shellpipe=2>&1\ >
autocmd BufWritePost <buffer> silent make
endif
おわりに
「知らなかった使ってみよう」と思ったプラグインはありましたか? 他にも便利なんだけどあまり知られてなさそうなPHP向けのvim pluginがあったら教えてください
-
PhpStormでも内部にTerminalを出せるのでTerminalから別言語を編集なんてこともやろうと思えばできるわけですが… ↩
-
Vundleのセットアップには、VimのVundleによるプラグイン管理 - Qiita が参考になります。 ↩