LoginSignup
5
7

More than 5 years have passed since last update.

Vimを暗黒パワーに染めるべくdein.vimを導入してみたメモ

Last updated at Posted at 2016-10-26

はじめに

私は長年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_ion_sourceon_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.vim
if &compatible
  set nocompatible
endif

augroup MyAutoCmd
  autocmd!
augroup END

let s:dein_dir = $HOME . '/.vim/dein'
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
let s: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()
  endif
endif

silent! 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の動作自体が若干軽くなった気がする。

TOMLファイルを複数準備し、うちひとつに端末固有のプラグインを列挙する方法で特定環境のみ利用するプラグインを管理することが出来た。
やり方はVimをより暗黒パワーに染めるべくdein.vimに端末固有のプラグインをロードさせるようにするメモに別途まとめたので、同じことに悩まれている方は参考にしてほしい。

5
7
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7