Go to list of users who liked
Share on X(Twitter)
Share on Facebook
More than 5 years have passed since last update.
NeoBundle から dein.vim に乗り換えたら爆速だった話
たまたま NeoBundle のリポジトリを見たらこんな PR が上がっておりました。平たく言うと、**NeoBundle はオワコンだから dein 使おう!**と作者の Shougo 氏自身がreddit で発言したそうなのです。僕自身は NeoBundle に何の不満もなかったのですが、dein の方がとにかく爆速らしいということは各所で強調されてましたので試してみました。
どのくらい速くなった?
最初に結論から。確かに起動速度は爆速です。インストール後、以下のコマンドを叩いてざっくり計測してみました。
vim--startuptime /tmp/time.log +q- ↑のコマンドを 5 回叩いて平均を見ました。
- 利用した設定ファイルはココ。
- MacVim Kaoriya 版 (7.4.1362)
- プラグイン総数: 98
- そのうち、起動時に有効 (not lazy loading) なもの: 35
- プラグインリストは全て TOML ファイルに書いています。
- その他諸々の設定含みます。
| NeoBundle | dein.vim | + load_state()
----|---:|---:|---:
最長 | 179ms | 119ms |
最短 | 165ms | 114ms |
平均 | 170ms | 116ms | 85ms
// 追記ここから 2016/03/22
以前設定ファイルの例として載せておりました
dein#load_cache()を使った例はdeprecated になりました。代替のdein#load_state()を使うと更に爆速に!NeoBundle から見れば半分の時間になってますね!驚きです。// 追記ここまで
**30% 以上速くなってます!**しかもこれ、他の諸々の設定込みですから人によってはもっと変わってくるでしょう。
速さはもちろんですが、設定項目が整理され、より分かりやすく、細かいところに手が届くようになってます。
で、なんだか順序が逆ですが、以下インストール方法と、NeoBundle から乗り換えるときの Tips を書いていきます。
インストール方法
基本的なところはdein.vimを使ってみる - Qiita に既に上がってますので、ここではShougo 氏のvimrc を見てよりスマートに(?)設定してみます。特に、プラグインリストの TOML 化は高速起動のために必須です。
// 追記ここから 2016/03/22
上にも書いてますが、
dein#load_cache()はdeprecated になったので、dein#load_state()を使った例に書き換えました。// 追記ここまで
" vimrc に以下のように追記" プラグインが実際にインストールされるディレクトリ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_direndifexecute'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プラグインのリストを書く
インストールするプラグインのリストは TOML に書いていきます。
- 起動時に必ず読み込むもの
~/.vim/rc/dein.toml
- 特定の条件で後から読み込むもの
~/.vim/rc/dein_lazy.toml
1.dein.toml の例
NeoBundle & dein.vim を初めて触る方は 1. だけで十分です。
// 追記ここから 2016/04/09
buildパラメータの書式が変わりましたのでvimprocの設定方法を修正しました。くわしくはこちらを参照してください。// 追記ここまで
# 基本は github.com のレポジトリーを指定するだけ[[plugins]]repo='Shougo/dein.vim'# git clone 後、実行すべきコマンドがある場合はこんな感じ[[plugins]]repo='Shougo/vimproc.vim'hook_post_update=''' if dein#util#_is_windows() let cmd = 'tools\\update-dll-mingw' elseif dein#util#_is_cygwin() let cmd = 'make-f make_cygwin.mak' elseif executable('gmake') let cmd = 'gmake' else let cmd = 'make' endif let g:dein#plugin.build = cmd'''# ブランチやタグを指定したいとき[[plugins]]repo='delphinus35/typescript-vim'rev='colorize-template-strings'# 特定の条件で読み込みたいとき[[plugins]]repo='elzr/vim-json'if='''! has('kaoriya')'''# 依存関係を指定したいとき[[plugins]]repo='vim-airline/vim-airline'depends=['vim-airline-themes']# 依存関係を指定したからと言って、自動でインストールはされない(ここは NeoBundle と違う)[[plugins]]repo='vim-airline/vim-airline-themes'if とか NeoBundle には有りませんでしたね!超便利です。
2.dein_lazy.toml の例
プラグインの数が多くなってくると起動速度が遅くなってきます。必ずしも起動時に必要でないプラグインは、利用条件と共に 2. に移しましょう。
# 特定のファイルタイプで読み込む[[plugins]]repo='Quramy/tsuquyomi'on_ft=['typescript']# インサートモードに入ったら読み込む[[plugins]]repo='Shougo/neocomplete.vim'on_i= 1[[plugins]]repo='Shougo/unite.vim'# unite.vim を読み込んだら一緒に読み込む[[plugins]]repo='Shougo/neomru.vim'on_source=['unite.vim']# 特定のコマンドを打ったら読み込む[[plugins]]repo='thinca/vim-prettyprint'on_cmd=['PP','PrettyPrint']# 特定のマッピングを使ったら読み込む# 又、gvim でしか利用しない[[plugins]]repo='thinca/vim-fontzoom'on_cmd=['Fontzoom']on_map=['<Plug>(fontzoom-']gui= 1などなど、他にもありますので:h dein してマニュアルを読んでみてください。
NeoBundle から以降で変わったこと・気をつけること
移行時にハマった点、気付いた新機能などを書いときます。
Neovim に対応した(らしい)
Neovim 自体使ってないので試してないのです……。非同期でインストールやアップデートできて、それはそれは快適らしいですよ。
depends を書いただけではインストールしてくれない & 書式もちょっと違う
これが一番ハマりました。今までは
# NeoBundle 用設定[[plugins]]repo='vim-airline/vim-airline'depends=['vim-airline/vim-airline-themes']と、書いとくだけでvim-airline-themes まで一緒にインストールされたんですが、dein.vim では個別に書く必要があります。
# dein 用設定# depends の書式も微妙に違う[[plugins]]repo='vim-airline/vim-airline'depends=['/vim-airline-themes'][[plugins]]repo='vim-airline/vim-airline-themes'うーん。これならdepends 特に要らない気がする……。
if の追加
Vim script によって読み込む条件を指定可能になりました。これはスゴイ便利です。
[[plugins]]repo='elzr/vim-json'if='''! has('kaoriya')'''Kaoriya 版以外の時のみ、読み込んでいます。Vim の構文がそのまま書けます。
プラグイン情報を取得するコマンドが変わった。
今までプラグインのインストールパスを調べるために
letl:path= neobundle#config#get('hoge').pathとかしてましたが、
letl:path= dein#get('hoge').pathになりました。短い!
プラグインのインストールパスの形式が変わった
今までは指定されたディレクトリにプラグイン名が羅列されていましたが、
# NeoBundle/plugin1.vim/plugin2.vim...dein.vim では github.com のパス名がそのまま入るようになりました。go get した時みたいです。
# dein.vim/repos/github.com/author1/plugin1.vim/repos/github.com/author2/plugin2.vim...unite ソースとかがばっさりなくなった
Unite dein という、プラグインリストが見れるものだけになりました。neobundle/update とか重宝してたのですが……
まだまだ開発中のプラグインなので、なくなった機能はそのうち復活するのかも知れません。
on_source フックの設定方法が変わった
// 追記ここから 2016/04/09
TOML ファイルと使う場合、以下のように
autocmdを設定するよりも、各種hookを使った方が分かりやすいです。以下の記事を参照してください。[dein.vim] hook の便利な使い方 - Qiita
// 追記ここまで
lazy loading 時にのみ、有効な設定を書きたい場合があります。たとえば、vim-gista では Github Enterprise で使う場合、事前にコマンドを実行しておく必要があるのですが、lazy loading しているとこのコマンドはvimrc 内で使えません。
" 「E117: 未知の関数です」と言われてしまうcall gista#client#register('GHE','https://github.example.com/api/v3')NeoBundle ではこのようなとき、on_source フックを利用していたのですが、ぱっと見では何やってるのか分かりにくいものでした。
" NeoBundle 用コードlets:hooks= neobundle#get_hooks('vim-gista')functions:hooks.on_source(bundle)call gista#client#register('GHE','https://github.example.com/api/v3')endfunctiondein.vim では以下のように書きましょう。
" どこか最初の方に書いておくaugroup MyAutoCmd autocmd!augroup END" プラグインごとに if 文を書くif dein#tap('vim-gista')" 実行すべき関数function!s:gista_on_source() abortcall gista#client#register('GHE','https://github.example.com/api/v3')endfunction" g:dein#name にはプラグイン名が入るexecute'autocmd MyAutoCmd User''dein#source#'.g:dein#name \'call s:gista_on_source()'endifVim 標準のautocmd 機構を使うようになりました。NeoBundle と比べて、なるべく Vim 標準の機能を使っていることが dein.vim の速さの秘密なのかも知れません。
というわけで、dein.vim の使い方と NeoBundle からの移行方法についてまとめてみました。重ねて言いますが、NeoBundle は deprecated になってしまいましたので、これからプラグイン管理を始める方は是非 dein.vim を使いましょう!
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
