5年ほど前に構築したVimの環境を使いまわしていたら、いつの間にかNeoBundleがオワコンになっていたようでdeinに移行したよという話です。基本的には NeoBundle から dein.vim に乗り換えたら爆速だった話 - Qiitaを参考にしたのですが、一部設定で分かりづらいことがあったので備忘録もかねて残しておきます。
deinをインストール
vimrcにdein用の設定を追加します
"#####dein設定#####" プラグインがインストールされるディレクトリlets:dein_dir= expand('~/.cache/dein')" dein.vim 本体がインストールされるディレクトリlets:dein_repo_dir=s:dein_dir.'/repos/github.com/Shougo/dein.vim'" dein.vim がなければ github から落としてくるif&runtimepath !~# '/dein.vim'if!isdirectory(s:dein_repo_dir)
execute '!git clone https://github.com/Shougo/dein.vim's:dein_repo_direndif
execute 'set runtimepath^='. fnamemodify(s:dein_repo_dir,':p')endif" 設定開始if dein#load_state(s:dein_dir)call dein#begin(s:dein_dir)" プラグインリストを収めた TOML ファイル" 予め TOML ファイル(後述)を用意しておくletg:rc_dir= expand('~/.vim/rc')lets:toml=g:rc_dir.'/dein.toml'lets:lazy_toml=g:rc_dir.'/dein_lazy.toml'" TOML を読み込み、キャッシュしておくcall dein#load_toml(s:toml,{'lazy':0})call dein#load_toml(s:lazy_toml,{'lazy':1})" 設定終了call dein#end()call dein#save_state()endif" もし、未インストールものものがあったらインストールif dein#check_install()call dein#install()endif"#####基本設定#####" syntax on "シンタックスハイライトを有効にする" colorscheme slate
ここで1つだけ注意点があって、シンタックスハイライトなどの設定はdeinの設定の後に書かなければなりません。私の環境だけかもしれませんが、deinの設定より前に書いた場合設定が反映されませんでした。
プラグインをTOMLで管理
上のvimrcの中にあるように、2種類のTOMLファイルを用いてプラグインを管理します。
この機能が個人的にはNeoBundleからdeinへの移行で最もうれしい点なのですが(私が知らないだけでNeoBudleの時から同様のことはできたのかもしれません)deinではvimrcとは別にTOMLファイルでプラグイン及びプラグインごとの設定を管理することにより、vimrcを汚すことなくプラグインを楽に管理できます。さらにVim起動の高速化には欠かせない遅延処理も以下のように2つのファイルを使用することで簡単に行えます。
1. Vimの起動と同時に読み込まれるプラグイン~/.vim/rc/dein.toml
2. 特定の条件下で読み込まれるプラグイン~/.vim/rc/dein_lazy.toml
1. dein.toml
ここでは一例としてNERDTreeのみを入れてみます。
# dein本体。基本は repo に github のリポジトリを設定するだけでよい[[plugins]]repo='Shougo/dein.vim'# NERDTreeの設定[[plugins]]repo='scrooloose/nerdtree'# 従来は vimrc に書いていたプラグインごとの設定を toml 内で管理できるhook_add='''"NERDTreeの自動起動(ファイル名指定時にはNERDTreeを表示しない)autocmdStdinReadPre*lets:std_in=1autocmdVimEnter*ifargc()==0&&!exists("s:std_in")|NERDTree|endif"Ctrl+nで起動/終了map<C-n>:NERDTreeToggle<CR>'''
hook_add
については後述しますが、 hook_hoge
でhookが発火するタイミングを調節し様々な設定を適用します。
2. dein_lazy.toml
ここでは一例としてTaglistのみを入れてみます。
# deinの遅延読み込みの際の条件指定# on_ft ファイルタイプがマッチしたとき。String or List# on_path パスが一致した時# on_func 呼び出し機能が一致した時# on_source プラグインがロードされたとき# on_cmd コマンドが一致した時# on_map キーが一致した時# on_i on_event が奨励# on_event eventが発生したら# http://vim-jp.org/vimdoc-ja/autocmd.html#autocmd-events[[plugins]]repo='vim-scripts/taglist.vim'# どのタイミングでプラグインを読み込むのか指定# ここではファイルタイプが以下のいずれかに一致したときに読み込むように指定on_ft=['c','cpp','cmake']hook_source='map<C-t>:TlistToggle<CR>'
プラグインの読み込みタイミングについての詳細はdein.vim:tomlファイルでプラグイン管理する - Technical Noteのページやや下を参照。
hook の使い方
度々引用というか 最早コピペという感じもするのですが、詳しくは [dein.vim] hook の便利な使い方 - Qiitaを参照してください。上の設定でも出てきましたが、普段使うのは専ら hook_add
と hook_source
及び hook_post_source
の3種類だと思います。
hook_add
プラグインがdeinに追加されたときに実行されます。即ち、dein.toml
で管理しているプラグイン(Vimの起動時に読み込まれるプラグイン)に hook を追加する場合は必ずhook_add
を使用するしかありません。hook_source
プラグインが読み込まれる直前に実行されます。即ち、dein_lazy.toml
で管理しているプラグイン(何らかの条件下で読み込まれるプラグイン)に hook を追加する場合はこちらを使用すればよいと思います。ただしプラグインの機能を使用した処理を行う場合は、先にプラグインを読み込む必要があるので後述のhook_post_source
を使用する必要があります。hook_post_source
プラグインが読み込まれた直後に実行されます。用途としては上述のhook_source
内で書いた通りです。
他にもいくつか用意されていますが、詳しくは冒頭の記事をご覧ください。
この他にも if文の追加
や 依存関係の仕様変更
などの細かい変更はあったようですが、ここではこれ以上触れません。この記事の初めにも書きましたが詳細については元記事を参照していただければと思います。丸投げするようですみません。。。
ともかく、これで無事NeoBundleからdein.vimへの移行が完了しましたので再び快適なVim生活を送れるよう改造していきたいと思います。後日、TOMLの設定等に対応したdotfilesの管理方法については記事を書く予定です!