.vimrcに最近追加したもの
自動で構文チェック
rubyとphpで書く用。保存時にシンタックスチェックが走って、エラーがあれば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