【一人 vimrc advent calendar 2017】現在の filetype に対して簡単に設定を追記する【18日目】

一人 vimrc advent calendar 2017 18日目の記事になります。

filetype に対する設定

さて、vimrc で任意の filetype に対して設定を行う場合、以下のように autocmd を使用することが多いです。

" filetype=cpp に対する設定
autocmd Filetype cpp setlocal matchpairs+=<:>

上記のような設定でもいいんのですが vimrc の量が増えてくると管理しづらくなったり、新しく設定を追記するのもちょっと手間になってきます。
そこで、次のようなスクリプトを用いて vimrc ではなくて『Vim プラグインとして』扱うと管理しやすくなります。

Vim プラグインとして filetype 用のファイルを管理する

まず、保存するディレクトリを決めます。

" このパスに設定を保存するようにする
let $VIMFILETYPE_PLUGIN = "~/.vim/filetype"

次にこのディレクトリが Vim から読み込まれるように 'runtimepath' へと追記します。

set runtimepath+=$VIMFILETYPE_PLUGIN

このように 'runtimepath' に追加することで filetype=hoge を行った際に自動的に #VIMFILETYPE_PLUGIN/ftplugin/hoge.vim などファイルが読み込まれるようになります。
最後に以下のような編集用のスクリプト用いて filetype に対する設定ファイルを簡単に開きます。

command! EditFileType execute "split " . $VIMFILETYPE_PLUGIN . "/after/ftplugin/" .&filetype. ".vim"
nnoremap <silent> <Space><CR> :<C-u>EditFileType

あとは :EditFileType などでスクリプトファイルを開いてそこに設定を記述していけば、:set filetype= を行った際にその設定が読み込まれるようになります。
キーマッピング<Space><CR>)や開き方(split)などはお好みで変えてください。
また、注意点としては、

  • 設定を記述しただけでは反映されない
    • 再度 :set filetype={filetype} を行うことで反映される
  • グローバル(:set)ではなくてローカル(:setlocal)で設定を記述する

あたりですかね。
ちなみにランタイムのファイルよりも後に読み込まれるように $VIMFILETYPE_PLUGIN/ftplugin/ ではなくて $VIMFILETYPE_PLUGIN/after/ftplugin/ にファイルを保存しています。
こうすることで既存の設定を上書きすることが出来ます。

まとめ

  • filetype ごとの設定は autocmd FileType を使うのが簡単
  • vimrc で管理しづらくなってきたらプラグインとして管理するのも手
    わたしは割と初期の頃からこの設定を使っているんですがかなり便利です。