Help us understand the problem. What is going on with this article?

便利なんだけどあまり知られてなさそうなPHPer向けvim pluginのご紹介

More than 3 years have passed since last update.

PHP Advent Calendar 2016 の 8日目のエントリです。

いきなりで申し訳ないのですが、正直に申し上げるとPHPer全員に使っていただきたいエディタは、 PhpStorm + IdeaVIM だと考えています :bow:
しかしPhpStormは有料です。会社ではゴリゴリPHP書いてるけど家ではたまーーにしかPHPを触らない人にとってはちょっとお財布への負担が大きいです。

vimであれば、PhpStorm ほど優秀ではありませんが、最低限の補完はできるし無料です。goとPHPといった複数の言語を使っているようなプロダクトでも画面を縦に割って別々の言語を編集できたりします。1

vim はプラグインを入れたり設定を書く事で簡単に拡張できます。vimでPHPを書くために役に立つプラグインはたくさんありますが、今日はその中でも便利なんだけどネット上であまり使ってる話を見ないプラグインを紹介させていただきたいと思います。

1. vim-phpfmt

b.gif

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

このプラグインはすごいです。ファイル内で未使用変数や未定義変数を動的に検出し、変数名の色を変えて警告してくれます。
言葉で説明するよりも以下の画像を見ていただいたほうが早いでしょう。

a.gif

ファイル全体のチェックというよりは、カーソルがメソッド内に入るとそのメソッド内での未使用、未定義変数をチェックしてくれるみたいです。

公式にあるものは、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

c.gif

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があったら教えてください :smiley:


  1. PhpStormでも内部にTerminalを出せるのでTerminalから別言語を編集なんてこともやろうと思えばできるわけですが… :sweat_drops:  

  2. Vundleのセットアップには、VimのVundleによるプラグイン管理 - Qiita が参考になります。 

halt
PHPがメインのWebプログラマでしたが最近は組織論や採用分野に興味があります。趣味で電子工作、3Dプリンタを触ってます。
https://project-p.jp/halt/
klab
モバイルオンラインゲーム、その他スマートフォン関連サービス、及びサーバーインフラ開発・運用
http://www.klab.com/jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした