一旦Vimがメキメキと使えるようになるとプラグインもバリバリと導入したくなります。
最初は数個のプラグインを試しに使っているだけだったのが、
時を経るにつれて数多のプラグインを使うようになってくるものです。
こうなると問題になるのはプラグインの管理です。
数が増えてくると新しいものをインストールするのもインストール済みのものを新しいバージョンに更新するのも億劫になります。
そこで必要になるのが Vim プラグインを管理するためのツールです。
この手のツールは2008年8月に公開された vim-pathogen が最古だと思われますが、
とりわけ民衆に認知され始めたのは YAPC::Asia 2009 で発表 された
Vimana からだと思います。
この手の Vim プラグインマネージャーは既にいくつかの実装が存在するものの、いずれも欠点が存在します。
全ての設定、特に使用する プラグインのバージョン もバージョン管理システムの配下に置かれるべきです。
既存の実装は全て使用するプラグインのバージョンを管理しません。
これは 複数の異なる環境で同一の設定を使用することが不可能 ということです
(唯一の例外は vim-pathogen を
Git のサブモジュール等と併用することですが、
数多のプラグインをサブモジュール等で手動管理するのは骨が折れます)。
プラグインが依存するプラグインを自動でインストールできるよう、
プラグインの依存関係を適切に記述する標準的なフォーマットもあるべきです。
既存の実装のほぼ全てが依存関係の自動解決できません
(唯一の例外は
vim-addon-manager
ですが、これはプラグインが要求するバージョンを記述できません。
例えば他のプラグインから利用されるあるプラグインで過去のバージョンとは非互換な変更があった場合、
利用側が新バージョンに対応したものになるまでは非互換なバージョンはインストールすべきではありませんが、
これを自動でインストールしてしまう可能性があります)。
あらゆるソフトウェアには十分かつ再現可能なテストが含まれているべきです。
しかし既存の実装の一部、例えば
vundle
のテストは繰り返し実行して動作の成否を確認するための手順が含まれていませんし、
neobundle
に至っては一切のテストが存在しません。
ぶっちゃけありえない。
ツールのインストール手順は短く、
容易に再現可能で、
既存の環境に与える影響は可能な限り少なくすべきです。
既存の実装のほとんどは手動で ~/.vim
等のディレクトリの調整が必要です。
vimfiles へのパスはプラットフォームによって異なるので、
この手の作業を異なる環境で手動で行うのは骨が折れます。
最後に、この手のツールは他のものへ容易に移行できるよう、
ツール自身とツールにより作成されたファイルやディレクトリは簡単に抹消できるべきです。
既存の実装のうち、特に Vimana は~/.vim/colors
等へプラグインを直接デプロイするうえにuninstall
コマンド等もないためとても困ります。
さてどうしましょう。上記の観点から既存の実装は全て使い物になりません。
今日から始まる新生活を安心して送るためには一体どうすればよいでしょうか。
vim-flavor を使います。
gem install vim-flavor
cd $YOUR_REPOSITORY_FOR_DOTFILES
cat >VimFlavor <<'END'
# * git://github.com/kana/vim-textobj-indent.git を使うと宣言します。
# * 引数が '$USER/$REPO' の形式なら
# git://github.com/$USER/$REPO.git からプラグインを取得します。
# * kana/vim-textobj-indent は kana/vim-textobj-user に依存しています。
# このような依存関係は自動解決されて必要なものがインストールされます。
# (プラグインが自身の依存関係を VimFlavor ファイルで記述している場合)
# (FIXME: 依存関係の自動解決は現段階では未実装です。直に実装されます)
flavor 'kana/vim-textobj-indent'
# * git://github.com/vim-scripts/fakeclip.git を使うと宣言します。
# * 引数が '$REPO' の形式なら
# git://github.com/vim-scripts/$REPO.git からプラグインを取得します。
flavor 'fakeclip'
# * git://github.com/kana/vim-altr.git を使うと宣言します。
# * 引数が URI ならそこからプラグインを取得します。
flavor 'git://github.com/kana/vim-altr.git'
# * kana/vim-smartchr 0.1.0 以降を使うと宣言します。
# ただし 0.2.0 以降のバージョンは(非互換かもしれないので)使いません。
flavor 'kana/vim-smartchr', '~> 0.1.0'
# * kana/vim-smartword 0.1 以降を使うと宣言します。
# ただし 1.0 以降のバージョンは(まず非互換なので)使いません。
flavor 'kana/vim-smartword', '~> 0.1'
# * kana/vim-smarttill 0.1.0 以降を使うと宣言します。
# 特に使用するバージョンの上限は決めません。
# 非互換であったとしても可能な限り新しいバージョンを使います。
flavor 'kana/vim-smarttill', '>= 0.1.0'
END
# VimFlavor で宣言したプラグインを取得し、
# VimFlavor.lock (使用するバージョン等の情報のスナップショット) を作成し、
# ~/.vim 等へ宣言したプラグインと初期設定用のスクリプトをデプロイします。
vim-flavor install
# vimrc のできるだけ最初の行に以下のコマンドを追加してください:
#
# runtime flavors/bootstrap.vim
vim vimrc
git add VimFlavor VimFlavor.lock vimrc
git commit -m 'Use vim-flavor to manage my favorite Vim plugins'
vim-flavor upgrade
git add VimFlavor.lock
git commit -m 'Upgrade my favorite Vim plugins'
cat >>VimFlavor <<'END'
flavor 'kana/vim-operator-replace'
END
# 新たに使用すると宣言されたプラグインを取得し、
# VimFlavor.lock を適宜更新し、
# ~/.vim 等へ宣言したプラグインをデプロイします。
vim-flavor install
git add VimFlavor VimFlavor.lock
git commit -m 'Use kana/vim-operator-replace'
# VimFlavor から使わなくなったプラグインの宣言を削除する。
sed -i~ -e '/vim-smartchr/d' VimFlavor
# VimFlavor.lock を適宜更新し、
# ~/.vim 等から使わなくなったプラグインを削除します。
vim-flavor install
git add VimFlavor VimFlavor.lock
git commit -m 'Farewell kana/vim-smartchr'
vim-flavor install --vimfiles-path=/cygdrive/c/Users/kana/vimfiles
rm -r ~/.vim-flavor
rm -r ~/.vim/flavors # もしくは ~/vimfiles/flavors 等。
cd $YOUR_REPOSITORY_FOR_DOTFILES
rm VimFlavor VimFlavor.lock
git commit -am 'Farewell to vim-flavor'