自作プラグインを neobundle.vim で管理する
この記事は Vim Advent Calendar 2012 326日目の記事になります。
[追記]
色々とコードを修正しました。
昨日 Lingr の Vim 部屋で
「neobundle.vim で自作プラグインの管理はどうするのか」
みたいな話が出ていたので今回はわたしが行っている管理方法の紹介でもしてみたいと思います。
[保存ディレクトリ]
neobundle.vim で管理しているプラグインは基本的には neobundle#rc({dir}) で設定したディレクトリに保存されます。
call neobundle#rc(expand($HOME."/neobundle")) " $HOME."/neobundle" にプラグインファイルが保存される NeoBundle "Shougo/vimproc.vim" NeoBundle "Shougo/unite.vim" NeoBundle "Shougo/vimfiler.vim" NeoBundle "Shougo/vimshell.vim"
しかし、自作プラグインは他のプラグインとは別の場所に保存したい事があると思います。
(e.g.自作プラグインは Dropbox の中に放り込みたい
その場合は :NeoBundle 時に個別に保存するディレクトリを指定する事ができます。
call neobundle#rc(expand($HOME."/neobundle")) " $HOME."/neobundle" にプラグインファイルが保存される NeoBundle "Shougo/vimproc.vim" NeoBundle "Shougo/unite.vim" " "base" で指定したディレクトリに保存・読み込みが行われる NeoBundle "vim-marching", { \ "base" : "C:/Dropbox/vim/plugin" \ "type" : "nosync" \} NeoBundle "vim-operator-search", { \ "base" : "C:/Dropbox/vim/plugin" \ "type" : "nosync" \}
[:NeoBundleUpdate で更新されないようにする]
自作プラグインの場合、:NeoBundleUpdate での更新はほとんど意味がありません。
"stay_same" を設定しておくと :NeoBundleUpdate で更新が行われないようにする事ができます。
また、:NeoBundleUpdate! でも更新されないようにする場合は、"type" : "nosync" を設定しておくとよいでしょう。
call neobundle#rc(expand($HOME."/neobundle")) " $HOME."/neobundle" にプラグインファイルが保存される NeoBundle "Shougo/vimproc.vim" NeoBundle "Shougo/unite.vim" " :NeoBundleUpdate で更新されないが " :NeoBundleUpdate! では更新される NeoBundle "vim-marching", { \ "base" : "C:/Dropbox/vim/plugin", \ "stay_same" : 1, \} " :NeoBundleUpdate! でも更新されない NeoBundle "vim-operator-search", { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync" \}
自作プラグインの場合は "type" : "nosync" を設定しておくとよいと思います。
[自作プラグイン用のコマンドを定義する]
さて、自作プラグインは上記のような設定を使用するとよいでしょう。
しかし、:NeoBundle するたびにオプションを設定するのは手間です。
" 同じ設定が続くのは無駄 NeoBundle "vim-operator-search", { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync" \} NeoBundle "vim-watchdogs", { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync" \} NeoBundle "vim-reanimate", { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync" \} NeoBundle "unite-qfixhowm", { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync" \} NeoBundleOrigin "vim-textobj-multiblock", { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync" \}
こういう場合はコマンドを定義するとよいでしょう。
command! -nargs=1 \ MyNeoBundle \ NeoBundle <args>, { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync", \ } MyNeoBundle "vim-operator-search" MyNeoBundle "vim-watchdogs" MyNeoBundle "vim-reanimate" MyNeoBundle "unite-qfixhowm" MyNeoBundle "vim-textobj-multiblock"
これでだいぶスッキリしました。
また、個別に lazy や autoload などのオプションを設定するのであれば次のようなコマンドの方がよいでしょう。
function! s:neobundle_origin(name, ...) let base_option = { \ "base" : "C:/Dropbox/vim/plugin", \ "type" : "nosync", \ } let option = extend(base_option, get(a:, 1, {})) execute "NeoBundle" string(a:name) "," string(option) endfunction command! -nargs=* \ MyNeoBundle \ call s:neobundle_origin(<args>) " "lazy" : "1" であれば :NeoBundleLazy で定義する NeoBundleOrigin "vim-euphoric_player", { \ "lazy" : 1, \ 'autoload' : { \ "unite_sources" : ["euphoric_player_playlist", "euphoric_player_tracks"], \ } \} NeoBundleOrigin "vim-sugarpot", { \ "layz" : 1, \ 'autoload' : { \ 'commands' : [ \ { \ "name" : "SugarpotPreview", \ "complete" : "file", \ } \ ] \ } \}