Hack #238: neobundle.vim で plugin をモダンに管理する
Posted at 2011/10/25ツイート
こんにちは。Shougoです。Vimテクニックバイブルの執筆で長らくお休みを頂いていました。 執筆が終わってからも、プラグインの更新で忙しいのが難点です。 とはいえ、あまりに間隔が空いているのは執筆者としてまずいと感じたため、久しぶりに復帰します。
みなさん、Vimプラグイン管理には何をお使いでしょうか。残念ながら、Vimのプラグイン管理には良い方法がなく、 各々が「自分の考える最強のプラグイン管理プラグイン」を作ってきました。 つまり、長らくプラグイン管理プラグインは戦国時代の様相を呈していたわけです。 実装が存在しないVimJoltsもその一つです:-)。 しかし最近、Vimのプラグイン管理はVundleに一元化されることが多くなってきました。 「Hack #215: Vundleでプラグインをモダンに管理する」やVimテクニックバイブルでも紹介されています。 私も最初はpathogenを使っていましたが、アップデートが簡単なVundleに乗り換えた経緯があります。 ただしVundleにもいくつか不満があったため、自分でforkしたVundleをしばらく使用していました。 しかし、最終的にVundleの仕様変更に追随できなくなったため、forkしたVundleを元にneobundle.vimを開発することにしました。 変更点をVundleにマージするには、変更点が多すぎたということもあります。 今回はneobundle.vimについて紹介します。
neobundle.vimとVundleの違い
Vundleをベースにしたため、基本的な機能は同じです。 Vundleを知っているなら、すぐに乗り換えることも可能でしょう。 変更点は幾つかありますが、主なものは以下の通りです。
コマンド名が改善されている
VundleはBundleを意識して付けられたコマンド名になっているため、コマンド名とプラグイン名が対応していません。
例えば、プラグインをインストールするコマンド名は:VundleInstall
ではなく、:BundleInstall
です。
この辺りは、議論がされているようですが、まだ結論は出ていません。
neobundle.vimはプラグイン名をプレフィクスとした、:NeoBundleInstall
となっています。
BundleをNeoBundleに改名するだけで、基本的に使用することができます。
vital化されている
ルーチンを他のプラグインと共通化するために、vital.vimを使用しています。 プラグインの開発が楽になります。
shellslashがオンでも動作する
shellescape()
を使用していますが、shellslashオプションがオンの場合、クオートが”になってしまうという問題があります。
つまりWindows環境で、cmd.exeをshellとして使用している場合、shellslashを有効にしていると動きません。
neobundle.vimではshellescape()
を使用していません。
vimprocに対応している
vimprocが利用できる環境では、アップデートにvimprocを使用します。 Windows環境では、DOS窓が出ないという利点につながります。
unite.vimインタフェースの実装
実は、これがneobundle.vimで一番やりたかった機能です。 neobundle.vimはunite.vimのインタフェースを実装しているため、unite.vimからVimプラグインをアップデートすることができます。 非同期でアップデートを行うため、使用にはvimprocが必要です。 neobundle.vimはunite.vimやvimprocがない環境でも動作しなくてはならないため、従来のインタフェースも残っています。 ただし、従来のインタフェースは緊急用のため重視していません。
Subversion, Mercurialへの対応
tsukkeeさんがVundleに追加していた機能をマージし、Subversion, Mercurialに試験的な対応をしました。 まだ実験段階ですが、試していただければと思います。
リビジョン指定
:NeoBundle {repository} {revision}
という構文でリビジョン指定ができます。まだ実験段階の機能です。
不具合のあるプラグインのバージョンを固定する時に便利だと思います。
neobundle.vimの導入
neobundle.vimの開発は、github上で行われています。https://github.com/Shougo/neobundle.vim 導入する場合、~/.vimにリポジトリをcloneすると楽でしょう。
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/neobundle.vim.git
plugin の管理
plugin の管理は以下の様に .vimrc に NeoBundle 'plugin name'
と記述することで行います。
極端な話、Bundle
をNeoBundle
に変更するだけです。
set nocompatible
filetype off
if has('vim_starting')
set runtimepath+='path to neobundle directory'
call neobundle#rc(expand('~/.bundle'))
endif
NeoBundle 'git://github.com/Shougo/clang_complete.git'
NeoBundle 'git://github.com/Shougo/echodoc.git'
NeoBundle 'git://github.com/Shougo/neocomplcache.git'
NeoBundle 'git://github.com/Shougo/neobundle.vim.git'
NeoBundle 'git://github.com/Shougo/unite.vim.git'
NeoBundle 'git://github.com/Shougo/vim-vcs.git'
NeoBundle 'git://github.com/Shougo/vimfiler.git'
NeoBundle 'git://github.com/Shougo/vimshell.git'
NeoBundle 'git://github.com/Shougo/vinarise.git'
filetype plugin on
filetype indent on
Vundleと同様、先にfiletypeをoffにしてから、neobundle.vimの設定を行います。
最初、neobudle.vimの関数を呼べるよう、neobundle.vimのパスを&runtimepath
に追加します。
そしてneobundle#rc(expand('~/.bundle'))
で初期化します。
neobudle#rc()
の引数はプラグインをインストールする基準となるパスです。
NeoBundle
コマンドで設定をしたあと、最後にfiletype pluginをオンにします。
NeoBundle コマンドの使い方
Vundleと全く同じです。基本的にBundleコマンドがNeoBundleコマンドに変わっただけです。
Github 上のリポジトリから取得する
NeoBundle 'user_name/repository_name'
vim-scripts 上のリポジトリから取得する
NeoBundle 'script_name'
それ以外のリポジトリから取得する
NeoBundle 'git://repository_url'
NeoBundle 'http://svn.macports.org/repository/macports/contrib/mpvim/'
NeoBundle 'https://bitbucket.org/ns9tks/vim-fuzzyfinder'
Gitリポジトリのフルパスを指定します。 MercurialやSubversionにも試験的に対応しています。
pluginの管理
plugin のインストールには、:NeoBundleInstall
コマンドを使用します。
.vimrcで設定したplugin が自動的に取得され、インストールまで行われます。
ただし、アップデートしたプラグインを使用するには、Vimを再起動したほうが良いです。
:NeoBundleInstall
既にインストールされている plugin をアップデートするには、 :NeoBundleInstall!
コマンドを利用します。
通常のNeoBundleInstall
では、アップデートが行われないからです。
:NeoBundleInstall!
不要になったプラグインを削除するには、:NeoBundle
の設定を.vimrcから削除した後、
:NeoBundleClean
コマンドを実行します。
neobundle.vimはplugin検索には対応していません。
neobudle.vimはneobundle/install sourceを使用することで、
unite.vimインタフェースによりアップデートを行うことができます。
アップデートは非同期に行われます。
neobundle/install sourceの引数に!を与えると、:NeoBundleInstall!
相当になります。
プラグイン名を引数に与えることで、個別にアップデートをすることも可能です。
:Unite neobundle/install:!
:Unite neobundle/install:neocomplcache
:Unite neobundle/install:neocomplcache:unite.vim
ドキュメントの更新
プラグインのインストール時に、自動的に:helptags
コマンドが実行されるため、
ユーザーは何もする必要がありません。
参考
- :help neobundle
もどる
blog comments powered by Disqus