rcmdnk's blog

Vimが使えるようになる本

Vimのプラグインをアップデートしたら エラーが出るようになったので直した所のメモ。

NeoBundleとvim-submoduleが関連。

NeoBundleのアップデート

関連のあるアップデートはNeoBundleのこのアップデート。

Disable autoload function feature in vim_starting · Shougo/neobundle.vim@b035e8b

autoloadに関してvim_startingのとき(最初に.vimrcを読み込むとき) に読み込みを避ける様になった変更。

これまでは実はこれが無かったのでNeoBundleLazyautoload化してても起動時に読み込まれていたものがあったので、 それもきちんと後読みする様になった、と言うこと。

ひっかかった問題の設定

このアップデート後に問題を出したのは vim-submode というプラグイン。

Probrem at autoload when NeoBundleLazy is used · Issue #409 · Shougo/neobundle.vim

.vimrc
1
2
3
4
5
NeoBundleLazy "kana/vim-submode", {
  \ "autoload": { "commands": ["submode"]}}
...
call submode#enter_with("winsize", "n", "", "<C-w>>", "<C-w>>")
...

こんな感じでNeoBundleLazyを使ってautoload化し、 submodeというコマンドが呼ばれた時に初めて読み込まれる様(と思った設定に)にしていました。

ただ、このプラグインの使うにあたってsubmode#enter_with等、 このプラグインの中の関数を.vimrcの中で呼んでいます。

ですので、プラグインが読み込めて無ければそもそもこの関数は呼べないわけで、 呼べてた以上、実はこの関数に関する部分はautoload化しても読んでた訳です。

これが、NeoBundleの上記のアップデートで正しく後読みする様になったので、 結果的に関数が.vimrcを読む時には定義されていない状態になって、 上の関数を呼ぶ時に

Error detected while processing /home/user/.vimrc:
line 1561:
E117: Unknown function: submode#enter_with
line 2012:
E117: Unknown function: submode#enter_with
Press ENTER or type command to continue

みたいなエラーを出すようになりました。

.vimrcの訂正

この様なプラグインに対して、上のissueの中でも作者の人に言われてるように、 単にNeoBundleLazyautoloadを使うべきではない、 というだけです。

ですので、

1
2
3
-NeoBundleLazy "kana/vim-submode", {
-  \ "autoload": { "commands": ["submode"]}}
+NeoBundle "kana/vim-submode"

と、通常のNeoBunbldeで普通に呼ぶようにするだけ。

同じような問題に当たってる人も居るみたい 1 なので、 Unknown functionなエラーが出る様になった人は 見てみるとautoloadを使うべきでない所(特に.vimrcの中でそのプラグインの関数を使ってる)で 使ってる可能性が高いのでチェック。

Sponsored Links
Sponsored Links

« Macでフォルダの中身を全部取り出すサービスをAutomator作る sedを使ってファイルや複数行文字列の末尾の余計な空白行や改行を消す »

}