rcmdnk's blog

Dein Weg

Vimのプラグインマネージャープラグインの dein.vim のアップデートがあったようで色々 warningが出てたので.vimrcをアップデートした部分の話。

プラグインのアップデート。

deinでプラグインをアップデートするには

:call dein#update()

で、dein自身も含め全プラグインがアップデートされます。

[dein] Dictionary type of build is no longer supported

Vimで非同期コマンドを実装するためのライブラリである vimproc はインストール時にコンパイルする必要がありますが、 各環境でコンパイルの仕方が違うため、

1
2
3
4
5
6
7
call dein#add('Shougo/vimproc', {
\ 'build': {
\     'windows': 'tools\\update-dll-mingw',
\     'cygwin': 'make -f make_cygwin.mak',
\     'mac': 'make -f make_mac.mak',
\     'linux': 'make',
\     'unix': 'gmake'}})

こんな感じで環境ごとにビルド方法を指定したりしていました。 (NeoBundle時代から。)

この辞書型の指定が出来なくなりました。

Add build support · Shougo/dein.vim@3b6eae8

vim-jp – Ling: rhttp://lingr.com/room/vim/archives/2016/04/02

なのでシンプルに

1
call dein#add('Shougo/vimproc', 'build': 'make'})

と変更。 deinの機能をシンプルにしようとする方向だと思います。

vimprocのMakefile を見るとこの中でOSのチェックなどを行ってるので、 基本、makeが使えるなら単にmakeだけすれば良いはずで、 少なくともcygwinmaclinuxの場合は特に問題がありません。 unixの場合も大概makeでOK。

Windowsの場合にちょっと微妙ですが、 自分の環境ではCygwinのHomeの.vimを使うので Cygwin様にコンパイルしたものがあってそれがそのまま問題なく使えるので 今のところ問題はありません。

Windowsで純粋にVimだけ使う場合にどうなるのかちょっと分かりませんが 取り敢えず自分では問題がないのでこの変更で。

cache->state, begin/endの位置の変更

次に、

[dein] dein#load_cache() is deprecated.
[dein] Please use dein#load_state() instead.
[dein] dein#save_cache() is deprecated.
[dein] Please use dein#save_state() instead.

なメッセージが出てきたので、

dein#load_cache

dein#load_state(s:dein_dir)

に、

save_cache()

save_state()

に。load_stateの方はload_cacheと違ってパスを引数として渡すのが必須になっています。 これは下のbeginとの位置関係にも関係してきますが、 beginに与えるパスと同じにしておけばこれまでの引数を与えなかった場合と 同じ位置にstateを置けます。

この変更後、

[dein] Invalid begin/end block usage.

と言われたのでhelpを見てみると、

1
2
3
4
5
6
7
if dein#load_state(path)
  call dein#begin(path)
  " My plugins here:
  " ...
  call dein#end()
  call dein#save_state()
endif

な感じの例があります。

これまでは、

1
2
3
4
5
6
7
call dein#begin(path)
if dein#load_cache()
  " My plugins here:
  " ...
  call dein#save_cache()
endif
call dein#end()

こんな感じでbeginendcacheの外側に居ましたが、 stateを使う場合はその中に入れる様になっています。

beginload_stateより後に来る様になるので、 load_stateの時点でパスを教えてあげる必要が出てくる様になったみたいです。

なのでhelpに従ってbeginendの位置を移動。

on_iにおけるエラー?

上のアップデート後、Vimを立ち上げると、

Error detected while processing function dein#autoload#_on_i:
line    5:
E218: autocommand nesting too deep
Press ENTER or type command to continue
No matching autocommands
Press ENTER or type command to continue
Error detected while processing function neosnippet#init#_initialize[3]..<SNR>86_initialize_others:
line   47:
E218: autocommand nesting too deep
Press ENTER or type command to continue
No matching autocommands
Press ENTER or type command to continue

こんなエラーが。on_ineocomplete.vim で使っています。

neosnippet.vim の方では使ってません。

なんだろう、

このエラーで調べてみましたが、特に他に問題にしてる人はまだ居ない感じで、 ちょっと困ってましたが、単に、

:call dein#clear_state()

して立ち上げ直したら治りました。

上のエラーは単に 古いキャッシュと新しいメソッドが変なconflictをしてたんだと思います。

どうしてもダメなら~/.vim/deinとか消して全部入れなおせば治るかも。

Sponsored Links
Sponsored Links

« Moshでのアクセスの格闘(ルーター設定+Firewall(iptable)設定) Travis CIで複数の暗号化ファイルを使う方法 »

}