2012、361日目の記事になります。全世界3000億人の美少女Vimmerのみなさん、こんにちは。今回は、おなじみのプラグインマネージャNeoBundleに最近追加されたneobundle#tap・neobundle#untapや、丁度本日追加されたautoloadのon_sourceオプションを活用した、新・ももんが流NeoBundle管理術をお伝えしていきたいと思います。最近追加されたneobundle#tap・neobundle#untapについてこれは、私の以前の記事「ももんが流NeoBundle管理術」にてご紹介したs:bundle_tap関数やs:bundle_untap関数などを、NeoBundle作者であるShougoさんがオフィシャルな機能として実装してくださったものです。NeoBundle付属の関数となったことで若干ですが必要な記述量も減り、よりいい感じになりました。ももんが流NeoBundle管理術のコンセプト・考え方は上記記事を参考にしてください。コンセプトは、プラグイン管理とプラグイン設定を分離させる、です。具体的には、NeoBundle及びNeoBundleLazyコマンドのオプションは、依存関係やビルドコマンドなどの「プラグインのインストール方法・管理方法」といったものに絞り、autoloadの設定やプラグイン読み込み時の設定は固有のセクションで管理していきます。これにより、プラグインリストの見通しがよくなりますし、まぁ色々便利になります。本日追加されたautoloadのon_sourceオプションについて本日、私が出していた要望が実装されました。それがautoloadのon_sourceオプションです。NeoBundleがプラグインの遅延ロードに対応していることはご存知かと思います。遅延ロード、つまりLazy化を行ったプラグインには、どういったタイミングでプラグインを読み込むのかを設定する必要があります。それがautoloadオプションになります。filetypeやcommandsなどを指定し、それをトリガーにしてプラグインが読み込まれるのですが、本日新たにon_sourceというオプションが加わりました。これは、on_sourceで指定したプラグインが読み込まれようとした際、その前にプラグインをロードするというオプションになります。これによって、特定のプラグインが読み込まれていることを動作の前提としたプラグインの設定の記述がより簡潔に行えるようになります。具体例どういうことなのか、あまりピンとこない方が多いかと思います。そこで、具体例を挙げましょう。私のお気に入りの、VimShellというプラグインがあります。VimShellの見た目や機能を拡張するプラグインとして、拙作のVimShell-Pureというプラグインがあります。この2つのプラグインの設定を例とします。VimShell-PureはVimShellのプロンプトを書き換える機能を搭載しているため、VimShellが起動する前にロード(読み込み)が完了している必要があります。Lazy化された設定において、VimShellが起動するタイミングはVimShellをロードするタイミングとほぼ同じです。VimShellが:VimShellコマンドなどの実行によって起動されようとし、そのためにロードが行われる際、そのタイミングで割り込んでVimShell-Pureを先にロードする必要があります。この場合、on_sourceオプションを使用せずにそれを実現する設定を記述すると、以下の様になります。neobundle#untap()endif注目して欲しいのはneobundle#tapped.hooks.on_source関数の中身です。これは、そのプラグインがロードされようとした時に呼ばれるhook関数です。その中で、neobundle#is_installed()関数によってVimShell-Pureがインストールされているかの確認を行い、インストールされている場合はneobundle#source()関数によってVimShell-Pureを読み込むという設定が記述されています。neobundle#tapped.hooks.on_sourceの実行が完了、つまりVimShell-Pureのロードが完了した後、VimShellがロードされます。この様に設定を行っても、意図した通りの動作にはなります。この設定のよくない点は、neobundle#tapによってスコープ化されたVimShellの設定セクションの中で、VimShell-Pureの読み込みタイミングに関する設定を行っているという所です。VimShell-Pureがいつ・どのようなタイミングで読み込まれるべきなのかといった「VimShell-Pureのふるまい」を、「VimShellのふるまいを定義するべきセクション」の中で定義してしまっているのです。neobundle#tapを用いることでプラグインの設定セクションが明確化されたのに、複数のプラグインのふるまいに関する設定が1つのセクション内に混在している状況は精神衛生上よろしくありません。VimShell-Pureのふるまいを決める設定、特に読み込みに関するものがVimShellの設定セクション内に残っていると、たとえばVimShell-Pureプラグインの使用を一時的に中止たいと思い、VimShell-Pureプラグインの設定セクション(tapからuntapまで)をコメントアウトした場合も、VimShellの設定セクション内にVimShell-Pureの読み込み設定が残っており、意図せずプラグインが読み込まれてしまうといった弊害も考えられます。それに対して、on_sourceオプションを利用した設定は以下の通りになります。neobundle#untap()endifVimShell-Pureがいつ・どのようなタイミングで読み込まれるべきなのかといった「VimShell-Pureのふるまい」が、ちゃんと「VimShell-Pureのふるまいを定義するべきセクション」の中で完結して定義されていることがお分かりでしょうか。neobundle#tapとneobundle#untapを使用しそれぞれのプラグインの設定をそれぞれのセクション内に閉じ込めるということで、どのプラグインの設定がどこに記述されているのかといった情報が明確になりvimrc管理がとても行い易くなります。autoloadのon_sourceオプションを利用することで、読み込み順に関してもそれが行えるようになり、より見通しのよい.vimrcを作れるようになりました。362日目の担当は@thincaさんです。365日制覇目前です。2012における私の最後の記事になるでしょう。はてブに追加この記事をツイートFeedlyで購読supermomongaかなりすごいことでゆうめい。したまちでしらぬものはいない。),;’EmacsユーザーがVimを1ヶ月使った感想RubyでGUIアプリを作るならJRuby+JavaFX+Rawrで決まり!automatic.vimでウィンドウの一時的分割をハンドリングしようももんが流NeoBundle管理術Vimと対話せよVimShellが動的プロンプトに対応しました(やばい)ジャズだって聴ける。X(1)homebrew(1)rbenv(1)Evil(1)Mechanize(1)Scraping(1)聴いてるやつ。