PHP
Vim
ReluxDay 15

VimでPHPの開発環境をサクッと整える

この記事は Relux AdventCalendar 15日目の記事です。

普段、複数の環境(例えば、PHPとRuby、PHPとgolangなど)で開発を行う場合、
IDEだとPHPStormや、RubyMineなど、各開発環境に応じてエディタを切り替えて利用することになり、
手間に感じることが多々あります。

ただし、Vimを使っていればこういったスイッチングコストはゼロでコーディングを行うことが可能です。

そこで、VimでPHPの開発を行う際に、プラグインを使わなくても、ちょっとだけ楽ができる設定をいくつかご紹介したいと思います。

インデントの設定をする

プロジェクトや言語によってコーディングルールのインデント幅が違ってきたりします。
毎度、設定するのは面倒なので、ファイルの拡張子によって自動で切り替えられるようにしておきます。

augroup vimrc-filetype
  autocmd!
  " PHPだったらインデント幅が4で
  autocmd BufNewFile,BufRead *.php set filetype=php
  autocmd FileType php setlocal expandtab tabstop=4 softtabstop=4 shiftwidth=4

  " Rubyだったらインデント幅は2にしたい
  autocmd BufNewFile,BufRead *.rb set filetype=ruby
  autocmd BufNewFile,BufRead *.ruby set filetype=ruby
  autocmd FileType ruby setlocal expandtab tabstop=2 softtabstop=2 shiftwidth=2
augroup END

PHP lintを使う

PHPのlintもphp7ccphanなど色々ありますが、ここではPHP標準の機能を使ってみます。
PHPでコマンドラインからシンタックスチェックを行うには下記のコマンドです。

$ php -l <filename>

ただし、これをコマンドラインから毎度叩くのは手間なので、下記のような設定をしておきます。

function! s:PHPLint()
  let s:result = system('php -l ' . bufname(""))
  let s:count = split(s:result, "\n")
  echo s:result
endfunction

augroup php-lint
  autocmd!
  autocmd BufWritePost *.php call <SID>PHPLint()
augroup END

こうすることで、カレントバッファを保存するタイミングでシンタックスチェックを行なってくれます。

universal-ctagsを使う

プロジェクトのサイズがそれなりになったり、フレームワークの仕様を確認したい場合など、
コードリーディングを行う場面は頻繁に訪れます。
universal-ctags 1 を使ってtagsファイルを作成しておけば、
クラス名や、メソッド名等でジャンプでき、コードリーディングが捗ります。
tagsファイルを生成するには下記のコマンドです。

$ ctags -R

ただし、これをコマンドラインから毎度叩くのは手間なので、下記のような設定をしておきます。

function! s:generateCtags()
  let s:options = readfile('/path/to/.ctags') "ctagsの設定ファイルへのパス
  let s:command = [
    \'ctags',
    \'-f',
    \'/path/to/tags', "tagsファイルへのパス
  \]
  let s:command += s:options
  call job_start(s:command)
endfunction
nnoremap <silent> <Leader>gt :<C-u>call <SID>generateCtags()<CR>

これで任意のタイミングでtagsファイルを生成できます。
また、gitのフックを利用してclone時などに生成するようにしたりしておくと、さらに便利かもしれませんね。

こんな感じでVimなら、普段触れていない言語でも必要に応じて開発環境を気軽に整えることができるでしょう。


  1. 本家であるctagsは更新が滞っているようなので、最近はuniversal-ctagsの方を使っています。