この記事は 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もphp7ccやphanなど色々ありますが、ここでは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なら、普段触れていない言語でも必要に応じて開発環境を気軽に整えることができるでしょう。