Neobundle.vimのload_cacheを複数ファイル対応にするPRを投げたらマージされた
2015年も年の瀬が押し迫ったところで本年ブログ初めです、ご無沙汰しております。
特に大きなPullReqでもないし記事にするほどでも無い気はするけど、多分同じ問題に当たったことのある人は多いだろう(ほぼ同じ内容のissueが過去にもあった)し、何よりShougowareに初コントリビュートできたので記念記事。
問題
Neobundle.vim
に今年前半に実装された、TOMLファイルでプラグインを管理する機能とbundle設定をcacheする機能を同時に試していて、以下のようなvimrc
を書きました。
set runtimepath+=~/.config/nvim/bundle/neobundle.vim call neobundle#begin('~/.config/nvim/bundle/') if neobundle#load_cache() call neobundle#load_toml('plugin.define.toml') endif call neobundle#end()
しかしこの状態でplugin.define.toml
を更新してもNeobundle.vim
のcacheが更新されず、:NeoBundleInstall
しても新しく登録したプラグインがインストールされません。TOMLファイルの扱いにバグがあるのかと思い、call neobundle#load_toml('plugin.define.toml')
をsource 'plugin.define.vim'
として素直にvimscriptで書いても状況は変わらず。
原因
Neobundle.vim
のコードを読んでいると、neobundle#load_cache()
は$MYVIMRC
の更新日時がcacheの更新日時よりも新しい場合に限りcacheを再構築することが判明。neobundle#begin()
とneobundle#end()
に挟まれた部分で使っているファイルは適当に読み込みなおしてくれるだろうとかタカをくくっていたのが大間違いでした。
結論
ということで、load_cache()
に複数ファイル指定ができるような修正を加えてPullReqしました。幸い大きな問題もなくマージしていただけたのでNeobundle.vim
を更新すれば使えます。
if neobundle#load_cache( \ $MYVIMRC, \ 'plugin.define.toml' \ ) call neobundle#load_toml('plugin.define.toml') endif
引数を省略した場合は従来通り$MYVIMRC
のみチェックします。指定できるファイル数に制限はありません。
偉大なプラグインを生み出し続けている暗黒美夢王先生に感謝しつつ、何か引っかかった時は積極的にコントリビュートできるように頑張りたいと思いました。