Vimのプラグイン管理Vundleにてrails.vimを入れるとautoload周りでエラーが出る件について

vimプラグイン管理

vimプラグイン管理に関して、以前はvim-pathogenを使ってbundleディレクトリ以下にプラグインファイルをまとめる管理をしていた。標準のvimのやり方だと、プラグインのファイルが混ざってしまい、特定のプラグインを削除したり、更新したりをするためにファイルを1つ1つ確認せねばならず面倒になるからだ。

最近はvim-pathogenを一歩進めたvundleというプラグインを使っている。これは設定ファイルを書いておけば、vim上からプラグインを自動でダウンロード、更新してbundleディレクトリ以下で管理してくれる。vundleはRailsのgem管理に使われているBundleを参考にしているらしい。

ということでvundleを使っている。

rails.vimでautoload周りのエラーが出る

ところが最近、rails.vimの読み込みで失敗してしまう。調べてみたところ、以下の記事が見つかった。

" Bundle 'rails.vim'
" Fetch 'rails.vim' plugin from github.
Bundle 'tpope/vim-rails'
としたところ、ちゃんと使えるようになりました。

http://d.hatena.ne.jp/Umeyashiki/20111001/1317488217

上記のとおり、rails.vimからtpope/vim-railsに変更すると上手く動作する。

これはどういうことなのか。そもそもvundleの動作原理を知らなかったのでソースを参照することにした。

vundleの仕組みを調べる

https://github.com/gmarik/vundle/blob/master/autoload/vundle/config.vim

これを見ると、parse_nameで何処にレポジトリを見に行くのか決定している。
例えばレポジトリの設定を

Bundle 'rails.vim'

のように書いていくのだが、この書き方によって変わる。

  • https://github.com/以下を見に行く
    • 先頭がgh:もしくはgithub:
    • [文字列]/[文字列]であった場合
  • そのままアクセスする
    • git://から始まる
    • file://もしくはhttps://から始まる
    • 最後が.gitである
  • https://github.com/vim-scripts/以下を見に行く
    • 上記以外の場合

よって、

Bundle 'tpope/vim-fugitive'
Bundle 'git://git.wincent.com/command-t.git'
Bundle 'rails.vim'

のような指定があった場合、tpope/vim-fugitiveは[文字列]/[文字列]なので、https://github.com/tpope/vim-fugitive.gitを、git://git.wincent.com/command-t.gitはそのまま、rails.vimhttps://github.com/vim-scripts/rails.vimを見に行く。

https://github.com/vim-scripts/rails.vim のレポジトリの中を見ると、autoloadディレクトリはなく、2011/8/31の更新のままであり、かつミラーであると記されている。本家のhttps://github.com/tpope/vim-railsは5日前に変更されたばかりのファイルがあり、前述のミラーは多少古いようだ。

結論

rails.vimのように、単純に書いただけだと割と古い https://github.com/vim-scripts/スクリプトを掴んでしまうので、多少面倒でもgithubプラグインの執筆者を調べてtpope/vim-railsのように書いたほうが最新のプラグインを使えるので楽しいかと思う。