.vimrcに最近追加したもの

自動で構文チェック

rubyphpで書く用。保存時にシンタックスチェックが走って、エラーがあればQuickFixが開く。直れば閉じる。
phpに関しては、vimインストール時に同梱されてるコンパイラプラグインだと僕の環境に合ってなくて、makeprgに解釈できないオプションが付いてて実行時に固まってしまったり、errorformatが上手くマッチしなかったりする。かといってインストールされたものを修正するよりかは自前のvimrcで整えたい。
phpのerrorformatはwindowsのxammpのもので確認しながら書いた。手探りで書いたのであまりよく分かってない。

augroup My
    autocmd!
    autocmd FileType ruby setlocal makeprg=ruby\ -cw\ %
    autocmd FileType php  setlocal makeprg=php\ -l\ %
    autocmd FileType php  setlocal errorformat=%-E,%m\ in\ %f\ on\ line\ %l,%ZErrors\ parsing\ %f
    autocmd BufWritePost *.php,*.rb silent make
    autocmd QuickFixCmdPost make cw 3
augroup END

tagsの設定

tagsオプションの末尾に;をつけておくと、ディレクトリを遡ってtagsファイルを探しに行ってくれる。

if has('path_extra')
    set tags+=.tags;
endif

tagsファイルを生成する場所

生成する場所について、ネットを見回してもこうしてますといった話がない。ctagsコマンドの説明の上で、こうすればカレントディレクトリにtagsファイルができますといった程度で、そんなことしてたらあらゆる場所にtagsファイルが散乱するじゃないか。そういうものなの? それはそれとして、僕はプロジェクトルートとなる場所に一つだけできて欲しい。カレントディレクトリはバッファの場所になるよう設定してるし、どうしようかな…と考えた結果、自分の場合は.git/がある場所に決め打ちすることにした。
ファイル保存時にctagsコマンドが走るようにしたんだけど、今のところ100行前後の小さいものでしか動作させてないので、まともなプロジェクトで走らせたら重くてしょうがなくなるかもしれない。

augroup Ctags
    autocmd!
    autocmd BufWritePost *.vim,*.php,*.rb silent call s:ctags()
    autocmd BufWinEnter .tags setlocal filetype=tags
augroup END

function! s:ctags()
    let l:project_root = s:search_dir('./')
    if exists('l:project_root')
        call system("cd ". shellescape(l:project_root) .
                    \" && ctags -R " . " -f " .  shellescape(l:project_root . ".tags"))
    endif
endfunction

function! s:search_dir(dir)
    if !has('file_in_path')
        return
    endif
    let l:save_path = &path
    if &path[-1:-1] != ';'
        set path+=;
    endif
    let l:dir = finddir(a:dir)
    if l:dir =~ a:dir . '$'
        let l:dir = substitute(l:dir, a:dir . '$', '', '')
    endif
    let &path = l:save_path
    return l:dir
endfunction

gvimrc_local.vim

KaoriYa版を使わせてもらってるんだけど、今まではインストール時に同梱されてるgvimrcに直接手を入れて使ってた。gvimrc_local.vimがgvimrcに先立ってロードされて、さらに下記の設定しておくとgvimrc読み込みを抑止するんですね、ということを知ったので、gvimrc_local.vimには必要な気がするものだけgvimrcからコピペして使ってる。gvimrcにちゃんと書いてあるのにね…。vimrc_local.vimについても同様にした。

" $VIM/gvimrcで設定を上書きしない
let g:gvimrc_local_finish = 1

日本語の設定

KaoriYa同梱のencode_japan.vimまかせにするようにした。それまでは、ずんwikiというところで紹介されていた設定をコピペしていたんだけど、リローダブルじゃなかったのに最近気付いた。特に困ったこともなかったんだけど。