deinでのvimのプラグイン管理の最終形

vimのプラグイン管理をするためのプラグインdein.vimの使い方についてです。

vimには優秀なプラグインが数多く存在しており、それらを使わない手はありせん。使用するプラグインの数が多くなればなるほど、管理が大変になってきます。

そこで活躍するのが、プラグイン管理のためのプラグインdein.vimです。

参考:私が使用している便利なプラグイン一覧
vim とても強力なプラグインたち | MY ROBOTICS

neobundleからdein.vimへ

ひと昔前は私もプラグイン管理にneobundleを使用していました。

dein.vimはNeoBundleの作者であるShougoさんが作成した新しい時代のプラグイン管理マネージャです。(Shougoさんはvim界隈では有名ですね。)NeoBundleと比べてプラグインのロード時間がかなり短縮されています。

作者自身が「NeoBundleの時代は終わったからdein.vimに移行しよう。」と言っているので、NeoBundleをお使いの皆さんはぜひdeinに乗り換えましょう。

最終的なdein.vim

最終的にこのような形態に落ち着きました。
deinを導入するためのスクリプトです。

" インストールディレクトリの指定
let s:dein_dir = expand('~/.cache/dein')
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
let s:toml_file = expand('~/.config/nvim/dein') . '/plugins.toml'
let s:toml_dir = expand('~/.config/nvim/dein/plugins')

" dein.vim ディレクトリがruntimepathに入っていない場合、追加
if match( &runtimepath, '/dein.vim' ) == -1
  " dein_repo_dir で指定した場所に dein.vim が無い場合、git cloneしてくる
	if !isdirectory(s:dein_repo_dir)
		execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
	endif
	execute 'set runtimepath+=' . fnamemodify(s:dein_repo_dir, ':p')
endif

" dein の設定
if dein#load_state(s:dein_dir)
	call dein#begin(s:dein_dir)

  " 各プラグインのtomlを読み込む
	call dein#load_toml( s:toml_dir . '/tcomment_vim.toml', {} )
	call dein#load_toml( s:toml_dir . '/vim-surround.toml', {} )
	call dein#load_toml( s:toml_dir . '/yankround.vim.toml', {} )
	call dein#load_toml( s:toml_dir . '/neoterm.toml', {} )
	call dein#load_toml( s:toml_dir . '/lightline.vim.toml', {} )
	call dein#load_toml( s:toml_dir . '/ctrlp.vim.toml', {} )
	call dein#load_toml( s:toml_dir . '/iceberg.vim.toml', {} )
	call dein#load_toml( s:toml_dir . '/smart_tabline.vim.toml', {} )
	call dein#load_toml( s:toml_dir . '/vim-altercmd.toml', {} )
	
  call dein#end()
	call dein#save_state()
endif

" 各プラグインのインストールチェック(なかったら自動的に追加される)
if dein#check_install()
	call dein#install()
endif

使用するプラグインの記述は、toml形式で書かれた別ファイルを使用します。
サンプルコードでは、”~/.vim/dein/プラグイン名.toml” を読み込む設定となっています。

私は各プラグインごとにtomlファイルを用意しています。
まとめて1つのtomlファイルに記述することもできます。

tomlファイルの準備

次に、deinで管理したいプラグインを列挙したtoml形式のファイルを準備します。

[[plugins]]
repo = 'ユーザ名/リポジトリ名'
hook_add = '''
  プラグインの個別設定を記述
'''

tomlファイルの記述は上記のように行います。
例えば、yankround.vimの場合、

[[plugins]]
repo = 'LeafCage/yankround.vim'
hook_add = '''
	nmap p <Plug>(yankround-p)
	xmap p <Plug>(yankround-p)
	nmap P <Plug>(yankround-P)
	nmap gp <Plug>(yankround-gp)
	xmap gp <Plug>(yankround-gp)
	nmap gP <Plug>(yankround-gP)
	nmap <C-p> <Plug>(yankround-prev)
	nmap <C-n> <Plug>(yankround-next)
'''

hook_addには、プラグインの個別設定を記述します。(hook_addの”’~”’に記述された内容は、プラグインが追加されたタイミングで読み込まれます。)

遅延ロードについて

deinには遅延ロードという仕組みが導入されています。通常プラグインはvim起動直後に読み込まれますが、遅延ロードを使えば特定のタイミング(例えば、インサートモードに入った時)に読み込むことができるため、vimの起動時間を短縮することができます。

[[plugins]]
repo = 'myrobo/smart_tabline.vim'
on_ft = ['python']

遅延ロードを行う場合には on_* 系のオプションを指定します。
上の例では、ファイルタイプがpythonの場合のみプラグインをロードする指定をしています。

on_cmd
コマンドが実行されるにロード。ListかStringで指定。
on_cmd = [‘Hoge’] など。

on_event
イベントが実行される時にロード。ListかStringで指定。
on_event = [‘TabNew’] など。

on_func
関数が実行される時にロード。ListかStringで指定。
on_func = [‘Piyo’] など。

on_ft
指定されたファイルタイプの時にロード。ListかStringで指定。
on_ft=[‘Python’] など。

on_i
インサートモード移行時にロード。Numberで指定。0以外が指定されると有効となる。
on_i = 1 など。

プラグインをアップデートする

:call dein#update()

上記コマンドで、deinで追加したvimのプラグインをアップデートできます。
(githubにアクセスし、現在のローカルのプラグインが古ければpullしてくれます。)

そんなに頻繁には使わないですが、とても優秀なコマンドですので頭の片隅に留めておきましょう。

参考:私が使用している便利なプラグイン一覧
こちらに私が使用しているvimのプラグインをまとめて見ました。興味のある方は覗いてみてください。
vim とても強力なプラグインたち | MY ROBOTICS

以上、vimのプラグイン管理のためのプラグイン「dein」の使い方についてでした。