実践vimを久しぶりに読んで知ったftpluginについてメモ。vimにもともと備わっている機能で読むファイルの種類に応じて設定を行う。
vimはファイルを開くとその拡張子や中身の記述などからファイルがどの種類かを検知する。
その検知したファイルの種類に応じて$VIMRUNTIME/ftplugin/の下にあるそれぞれのファイルを読み込んで設定を行っている。
ftpluginについての詳細はヘルプやこちらのページがとてもわかりやすい
http://whileimautomaton.net/2008/09/07213145
デフォルトの設定に加えて独自の設定を入れたい場合は以下の場所に設定ファイルを置く
~/.vim/after/ftplugin/
~/.vimはデフォルトならruntimepathの先頭に設定されている
自分の.vimrcを見ると特定のfiletypeでしか必要のない設定がいくつも書かれていたのでその設定をftpluginに分けてみることにした
まずftpluginを使う前に.vimrcにすべて書く場合は例えば以下のようにできる
set nocompatible filetype off if has('vim_starting') set runtimepath+=~/.vim/bundle/neobundle.vim call neobundle#rc(expand('~/.vim/bundle/')) endif NeoBundle 'Shougo/neobundle.vim' NeoBundle 'Shougo/neocomplcache' autocmd FileType haskell NeoBundle 'eagletmt/ghcmod-vim' filetype plugin indent on
.hsファイルを読み込んだときのみghcmod-vimが使えるようになる
各ファイルタイプに対して加えたい設定が少ないなら↑のように書くのが簡単で良さそう。
だが、数が多くなってくるとFileTypeに応じた処理ばかりで汚くなる。そのときにはftpluginによって設定を書くファイル自体を分けてしまえる。上の例を分けると以下のようにできる。
filetype off if has('vim_starting') set runtimepath+=~/.vim/bundle/neobundle.vim call neobundle#rc(expand('~/.vim/bundle/')) endif NeoBundle 'eagletmt/ghcmod-vim' filetype plugin indent on
.vimrc
set nocompatible filetype off if has('vim_starting') set runtimepath+=~/.vim/bundle/neobundle.vim call neobundle#rc(expand('~/.vim/bundle/')) endif NeoBundle 'Shougo/neobundle.vim' NeoBundle 'Shougo/neocomplcache' filetype plugin indent on
これで.hsファイルをいじるときのみghcmod-vimが有効になる
neobundleなどのプラグインを読み込むときは一度filetypeをoffにしておく必要があるので忘れずに。
vimrcで一度読み込めばよいのかと思っていたが、neobundleの初期化設定をpluginにしたファイルにも入れる必要がある模様。今度neobundleがどんな処理でプラグインを読んでいるか調べてみようと思う。
今のところ、一つのfiletypeに対して加えたい設定が多くなってきたらftpluginとして分けるというのが良さそう
- 作者: DrewNeil,新丈径
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/01/28
- メディア: Kindle版
- この商品を含むブログ (1件) を見る