Vimで、ファイルの存在するディレクトリ単位で、インデントの設定とかを変える

Haxe用の使いやすそうなエディタを調べていくうちに、vaxeというVimプラグインがなかなか良さげな感じだったので、結局 Vimを使い始めることにした。

ファイルタイプごとにインデントの設定を変えるには、vimrcに、例えば autocmd FileType haxe setlocal noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 などと書いておけば良い。 しかし、ファイルタイプに加えて、さらにプロジェクト単位で、インデントの設定を変えたくなることがよくある。(参加しているプロジェクトごとにインデントの規則が違うとか、ある日突然好きなインデントのタイプが変わったとか)

そこで、localvimrc というvimプラグインを入れて、プロジェクトごと(ファイルが存在するディレクトリごと)に追加のvimrcを設定できるようにしてみた。

プロジェクトのトップディレクトリに .lvimrc というファイルを作っておくと、そのディレクトリ以下(サブディレクトリ含む)のファイルを開いたときに、自動的に .lvimrc の内容を実行してくれるので、ここにインデントの設定などを書いておけば良い。

NeoBundleを使っているので、vimrcに、プラグインの場所を追加してインストール

" vimrcに追記
NeoBundle 'embear/vim-localvimrc'


デフォルトのままだと、毎回 .lvimrc を実行するか聞かれて面倒なので、選択を保存する設定にする。ただし、あらかじめ空のファイル ~/.localvimrc_persistent を作成しておく必要があるみたい。

" vimrcに追記
let g:localvimrc_persistent=2


デフォルトのままだと、sandboxで実行されるため、インデントの設定とかを変えられないようなので、無効にしておく(実はsandboxが何なのかよく分かっていない...)

" vimrcに追記
let g:localvimrc_sandbox=0


あとは、プロジェクトのトップディレクトリに、以下のような .lvimrc をおけば、このプロジェクト専用のインデントの設定ができる。(この例の場合、filetypeがhaxeの場合のみインデントの設定を変更している)

if &filetype=='haxe'
    setlocal expandtab tabstop=4 shiftwidth=4 softtabstop=4
endif


やったね!