.vimrc の各言語のタブのインデント数を外部ファイルから読み込む形にした
なんか同じ言語でもプロジェクトによってインデント数切り替えたいとかでてきたので実装してみました。
外部ファイルは .vimrc.local にして、ここに let ruby_tabnum = 2
という風に記述しておいてそれを読み込んで設定するといった形にすることにしました。
.vimrc.local というファイル名が適切かどうかわかりませんが、なんかこれを読み込んでるコードをちらっとみたのでこれにしてみます。
このファイルは ignore しておいて、プロジェクトごとにサクッと変えたらすぐインデント数がかわって差分もでない、といった感じです。
因みに私のdotfiles は
GitHub - bamboo-yujiro/dotfiles
にあるので、よかったら覗いてください。
まず.vimrcで外部ファイル読み込み
if filereadable(expand("~/dotfiles/.vimrc.local")) source ~/dotfiles/.vimrc.local endif
上記のように書きます。
続いて.vimrc.local です。
"let php_tabnum = 8 let python_tabnum = 4 let ruby_tabnum = 2 let perl_tabnum = 4
php_tabnum がコメントアウトされていますが、設定がない場合でもエラーがでないように.vimrc のほうにデフォルト値を設定しておくようにするので、そのデバッグ用にこうしておきます。
そのうえで、
" 各ファイルフォーマットタブインデント数のデフォルト値 if !exists("php_tabnum") | let php_tabnum = 4 | endif if !exists("python_tabnum") | let python_tabnum = 4 | endif if !exists("ruby_tabnum") | let ruby_tabnum = 2 | endif if !exists("perl_tabnum") | let perl_tabnum = 4 | endif
上記のようにして、設定がない場合もエラーがでないようにlet で定数定義しておきます。
あとは
autocmd FileType php,ctp execute "set tabstop=".php_tabnum autocmd FileType php,ctp execute "set shiftwidth=".php_tabnum autocmd FileType python execute "set tabstop=".python_tabnum autocmd FileType python execute "set shiftwidth=".python_tabnum
上記のようにかいて終了です。
変更前は
autocmd FileType php,ctp :set tabstop=4
上記のようになっていたのですが、この書き方だと let が展開できないため、execute を使いました。
参考
vim - How do I use variables in my .vimrc? - Stack Overflow
因みに.vimrc のデバッグは
私は echo して :source %
という風にします。
例えば上記の場合、.vimrc の下記部分をコメントアウトした上で
"if !exists("php_tabnum") | let php_tabnum = 4 | endif "if !exists("python_tabnum") | let python_tabnum = 4 | endif "if !exists("ruby_tabnum") | let ruby_tabnum = 2 | endif "if !exists("perl_tabnum") | let perl_tabnum = 4 | endif
echo exists("php_tabnum")
として :source %
とすると 0
と出力されます。
基本的にはこれでこと足りると思います。
以上です。