はじめに
私は長年pathogenを利用しており、特に困ってはいなかった。
しかし、Vimもメジャーバージョンが上がり、プラグイン管理もそろそろ見直すべきだと感じてきた。
そのため、ひとまずQiita上でよく見かけるdein.vimを導入してみることにした。
前提: 導入前の環境
- pathogenを使用している
- 各プラグインは
git
のサブモジュールとして管理
pathogenが登場した辺りに環境を作って今まで来たという状況である。
導入しているプラグインの数もさほど多くもなく、(一度起動したVimを閉じること自体が稀なので)起動時間に不満のない状況では遅延読み込みと言ったワードにもさほど興味を持っていなかった。
dein.vimの特徴
- コマンドはなく、関数のみで構成されている
- NeoVim及びVim8の非同期APIに対応
- TOMLで設定が書ける
今時のリッチなプラグインマネージャーを利用しているならともかく、pathogenのような最低限$VIMRUNTIME
の中さえ整理できれば良いという極めてシンプルなプラグインを使っていた身としてはこの程度の認識となる。
導入手順
1. .gitmodules
から設定用TOMLファイルを生成する
:%v/url/d
:s/^.\+\/\([^\/]\+\)\/\([^\/]\+\).git/[[plugins]]^Mrepo = '\1\/\2'
^M
は<C-v><CR>
で入力できる制御コードなので注意。
このExコマンドを実行するとTOMLっぽい形式になるので、そこから適時修正を加えてちゃんとしたTOMLファイルを仕上げる。
その際にon_i
やon_source
、on_ft
と言った遅延ロードの設定も加えておくと良い。
2. dein.vimを適当な場所にインストールする
dein.vimのインストールすらも.vimrc
に書いて自動化する例を見かけたが、すでにgit
で管理しているのでサブモジュールとして管理することにした。
$ cd /path/to/dotfile_dir$ mkdir .vim/dein$ git submodule add https://github.com/Shougo/dein.vim.git .vim/dein//repos/github.com/Shougo/dein.vim
3. .vimrc
を修正する
pathogen用の設定をばっさり削除し、dein.vim用の設定に置き換える。
私は以下のように書いた。
" use dein.vimif!&compatiblesetnocompatibleendif
augroup MyAutoCmd
autocmd!
augroup END
lets:dein_dir = $HOME . '/.vim/dein'lets:dein_repo_dir =s:dein_dir . '/repos/github.com/Shougo/dein.vim'lets:toml_file =s:dein_dir . '/config.toml'let&rtp=&rtp .",". s:dein_repo_dir
if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir, [$MYVIMRC,s:toml_file])call dein#load_toml(s:toml_file)call dein#end()call dein#save_state()if dein#check_install()call dein#install()endifendifsilent! execute 'helptags's:dein_repo_dir . '/doc/'
最後のhelptags
をやっておかないとdein.vimのヘルプが読めないので注意。
4. 既存のサブモジュールで管理しているプラグインたちを削除する
$ git rm -rf .vim/bundle
乗り換えてみての感想
今の状況だとあまり恩恵を感じられないというのが正直なところである。遅延ロードの設定をしてみたが起動時間に違いを感じられないため、もっと設定を煮詰める必要がありそうだ。vim --startuptime
でpathogen時の起動時間とdein.vim時の起動時間を計ってみたところ、起動時間が半分近く短くなっていた。
また、特定環境のみ利用するプラグインがあるのだが、dein#local()
を使ってもうまく読み込むことができなかった。
ヘルプには書いていないが恐らくdein#begin()
ブロック内に書く必要があるのだろうが、個人的に全端末共通の設定を.vimrc
に、端末固有の設定を.vimrc.local
にと分けて書いているため、できればdein#begin()
ブロックもふたつ以上に分けたい。
しかし分けて書いてみてもロードされず、多分やり方はあるのだろうが段々億劫になってきたのでVim8標準のプラグイン管理機能を利用すべく.vim/pack/bundle/start
に端末固有のプラグインを配置することにした。
時間を見つけて設定等を練り直そうと思うが、今の状況なら億劫になってVim8で導入された標準のパッケージ管理機能を利用する方向に進んでしまうかもしれない。
vim --startuptime
の出力結果を見ながら遅延ロードにして問題なさそうなものをひたすら遅延ロードにしたところ、pathogenを使っていたころと比べて1/3の時間で立ち上がってくるようになった。
一度起動したVimを閉じること自体稀なので起動時間の恩恵はあまり感じないのだが、たまにしか使わないプラグインを標準では読み込まないようにすることでVimの動作自体が若干軽くなった気がする。