vim-localvimrcで編集するファイルパスごとに異なる設定を保持する
Vim Advent Calendar 2013 の87日目の記事になります。
今年もまだ続いてるようで安心しました。
はじめに
自分はハードタブよりもスペースでタブを表現するソフトタブの方が好きですし、今までの現場/案件も全てソフトタブでコードを書いてきました。
しかしある日突然そいつはやってきました。
某フレームワークを使った案件なのですが、フレームワーク内のコーディング規約を見てみると。
すべてのインデントはスペースではなくタブを使用すべきです。
まじかよ。。。
さすがに無視するわけにもいかないので、嫌々ながらもハードタブを使うことになったのですが、.vimrcにハードタブ用の設定(noexpandtab)を書いてしまうとプロジェクトの内外に関わらず全ての編集作業でハードタブが入り込んでしまうようになりました。
複数人で触る大量のファイルにモードラインを入れるとかありえないし。
一体どうしたもんか。
vim-localvimrcの導入
困っていたところ、ひとつのプラギンを発見しました。
embear/vim-localvimrc · GitHub
このプラギンはファイルパスを遡ってローカル用の.vimrc(デフォルトでは.lvimrc)を探し、存在すれば適用してくれます。
目的のプロジェクトのルートにバッファローカルな設定を行う.vimrcを置いてみます。
$ echo 'setlocal noexpandtab tabstop=4' > /path/to/project/.lvimrc
たったこれだけで問題はバッチリ解決しました。
またバージョン管理を使っている場合は.lvimrcを無視パターンに追加するのを忘れずに。
vim-localvimrcの設定可能な項目を以下に書いておきます。
変数 | 説明 | デフォルト |
---|---|---|
g:localvimrc_name | 対象となるローカル設定ファイルの名前 | .lvimrc |
g:localvimrc_reverse | 0: 下位ディレクトリのものほど設定を優先 1: 上位ディレクトリのものほど設定を優先 |
0 |
g:localvimrc_count | 読み込みを行う上限数 | -1(制限なし) |
g:localvimrc_sandbox | 0: 設定ファイルの評価をサンドボックスで行わない 1: 設定ファイルの評価をサンドボックスで行う |
1 |
g:localvimrc_ask | 0: 設定ファイルが見つかったら即読み込む 1: 設定ファイルが見つかったら読み込みを行うかどうかの確認を促す |
1 |
g:localvimrc_persistent | 0: g:localvimrc_askでの選択内容を保持しない 1: Y/N/Aなどの大文字の入力時にのみ保持する 2: 常に保持する |
0 |
g:localvimrc_persistence_file | g:localvimrc_persistentの情報を保持するファイル名 | $HOME/localvimrc_persistent |
g:localvimrc_whitelist | 読み込みを許可するための正規表現 | (なし) |
g:localvimrc_blacklist | 読み込みを拒否するための正規表現 | (なし) |
その他
似たプラギンは他にもあります。
- thinca/vim-localrc · GitHub
- thincaさん作。シンプルで綺麗だが、自分の環境でうまく動かなかった。
- vim-scripts/local_vimrc.vim · GitHub
- 古い上に全然更新されてない。
中身をすべて確認したわけではありませんが、今回はとりあえず動かしてみて自分にあってそうなものを選びました。