vim-users.jp

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' と記述することで行います。 極端な話、BundleNeoBundleに変更するだけです。

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
Shougo

もどる
blog comments powered by Disqus