unoh.github.com

Vim: ちょこっと設定、ちょこっとプラグイン。

Wed Jul 28 23:37:37 -0700 2010

ども。6月入社のjhoshinaです。

まだ入社したてのつもりだったのに、ラボブログ執筆がまわってきてあたふたしています。

何を書こうか迷ったのですが、環境も新しくなったことですし、設定しなおしたVimの設定・プラグインなどをちょこっと見ていこうかと思います。phpとsymfony関係を中心に見ていきます。

雑多な設定

特に変わったところもないのですが一応。

~/.vimrc

set nocompatible
set showmatch showmode showcmd
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P

syntax on
filetype on
filetype indent on
filetype plugin on

~/.vim/ftplugin/php.vim

setlocal shiftwidth=4 tabstop=4 expandtab nowrap

let php_sql_query = 1
let php_baselib = 1
let php_htmlInStrings = 1
let php_noShortTags = 1
let php_parent_error_close = 1
let php_parent_error_open = 1
"let php_folding = 1
"let php_sync_method = x

" for QuickFix
setlocal makeprg=php\ -l\ %
setlocal errorformat=%m\ in\ %f\ on\ line\ %l

自分の場合、見通しのよさと影響を重視して、ファイルタイプ別の設定は極力~/.vim/ftplugin/*.vimにsetlocalで書くようにしています。

設定読み込みの順番はruntimepathが示すように、 ~/.vim -> (Vim標準ディレクトリ) -> ~/.vim/after となっているので、各種プラグインなどが読み込まれた後に設定が必要であれば ~/.vim/after 以下に設定してます。

matchit.vim

PHPと直接関係ないのですが、対応する括弧に移動するコマンド「%」を拡張するマクロです。

HTMLの対応タグにジャンプできるのはもちろんのことで、例えば、

<?php if ($foo): ?>
Hello World!
<?php else: ?>
Oh..
<?php endif ?>

というコードがあった場合、ifの上で%を押すことによって、else、endifの場所に移動してくれます。

matchit.vimはVimの標準配布物に含まれているため、

source $VIMRUNTIME/macros/matchit.vim

と、~/.vimrcに記述するだけで有効になります。もちろん、~/.vim/pluginにコピーしても動きます。

symfony.vim

Symfonyでファイル間の移動などを行うプラグインです。

Symfonyで開発をしていると、Controller-View-Model間の移動が頻繁に行われますが、このプラグインを使うと移動が楽になります。

例えば、ControllerのexecuteIndex()内にカーソルがある状態で「:Sview」と打つと対応するindexSuccess.phpを、逆にindexSuccess.php上で「:Saction」と打つとアクション内の対応メソッドへとジャンプしてくれます。もちろんモデル名の上で「:Smodel」と打てば対応するモデルへと移動してくれます。

また、symfonyコマンドを発行することも可能で、

:Symfony generate:module frontend dashboard
:Symfony cc

などと、シェルに降りるまでもなく作業が続けられます。

snipMate

TextMateにあるようなsnippetの機能を提供するプラグインです。

同種のプラグインにsnippetsEmuがありますが、snippetの書きやすさからsnipMateを使っています。

ife<TAB>と入力すると

if (/* condition */) {
    // code...
} else {
    // code...
}

と展開されます。「/* condition */」の部分が選択された状態になっており、入力が終わったらTabを押すことによって、「// code...」の部分に移動できます。

前述のsymfony.vimをいれてあると、以下の設定でバッファにSymfonyのファイルタイプを仕込むことができるので、symfonyのファイルを開いた場合だけに適用するsnippetを定義することもできます。

autocmd User SymfonyBufInit setlocal filetype+=.symfony

soh335's vim-symfony-snipmate at master - GitHubにあるものを自分向けにいじって使っています。これで「requ<TAB>」と打つと「$this->getRequestParameter("");」なんて展開が可能になります。「Symfonyってメソッド名長いよね」と常々思っているので手放せません。

その他

他に最近ではctagsからcscopeに移行したり、project.vimをやめてNERDTreeにしたりしたのですが、まだ十分に使いこなせていない感じもあるので、このあたりはまた次の機会にでも。

では!