Vundleで管理してるプラグインの特定のバージョンを使いたい

すべてはwombatからはじまった

Vimを起動すると Cannot find color scheme wombat256 との表示。そんなはずはない。wombat256は入っている。Vundleを使って入れたのだ、間違いない。 .vimrc にだってこう書いてある。

Bundle 'wombat256.vim'

~/.vim/bundle 以下にだってちゃんとwombat256.vimはある。「もしかしたらVundleはカラースキームには使えないのか?」という疑念が頭をよぎる。こうして、wombat256.vim を使えるようにするための旅がはじまった。

Vundle はちゃんと動いているのか

Vundle自体は問題なく動作していて、すこぶる快適に使えていた、はずだった。基本的には問題なく動作しているのだけど、まさかカラースキームが読み込まれていなかったなんて。そういえば慣れ親しんだVimとはちょっと表情が違っていた。
ちなみに、このエントリ で書いたように、Vundle自体もVundleで管理している。その後、Vundle本体のアップデートも :BundleInstall!で可能であることも確認できた。

~/.vim/bundle/wombat256.vim のなかみ

答えはそこにあった。colorsの中にあったのは wombat256mod だったのだ。mod?もっど?モッド?
.vimrcの記述は先の通り。すると、参照されるのは vim.org のはず。
そう、そこにある最新版は2.0modなのだ。wombat256modを読み込むようにすれば解決?
否、使いたいのはwombat256なのだ。

Vundleでバージョン指定インストール

gmarik/vundle · GitHub を参照しても、プラグインのバージョンを指定する方法は見当たらない。READMEのTODOに次のような記述があった

  • allow specify revision/version?

つまり、将来的にはバージョン指定ができるようになるかもしれないが、現状は単純にプラグインを常に最新の状態にしておくためのものなのだ。

では、どうする

困ったときは、現場だ。現場にいけ。

% cd ~/.vim/bundle/wombat256.vim/
% ls -a
.      ..     .git   README colors

.git がいる。
そう、Vundleでいれたプラグインは実はすべてgitで管理されている。git-logをみるとmodではないころの歴史もたしかにそこに刻まれていた。そうとわかればあとは簡単。
git-checkoutすれば解決。

あれ、でも?

なんでwombat256のgitリポジトリが存在しているのだろう?.vimrcのBundleで明示的にgithubのリポジトリを指定しているならばわかる。bundle以下にgit-cloneしているのだろうから。しかし、今回wombat256はそうではない。vim.orgが参照されるのではないのか?

その時、声が聞こえた。「ソース読め」と。
該当部分は ここ のようだ。

  else
    let name = arg
    let uri  = 'https://github.com/vim-scripts/'.name.'.git'

Vundleでは、非gitリポジトリをBundleしようとすると、githubのvim-scriptsにあるgitリポジトリを参照してcloneするのだ。
つまり、次の書き方は同一の意味となる。

Bundle 'wombat256.vim'
Bundle 'vim-scripts/wombat256.vim'

まとめ

  • VundleでVundleを管理していても、本体のアップデートは問題なく可能
  • Bundle対象でvim.orgにあるプラグイン名だけ指定すると、自動的にgithubのリポジトリが参照される
  • プラグインの特定のバージョンを使いたい場合、そのバージョンをgit-checkoutすればよい