Hatena::ブログ(Diary)

かせいさんとこ

2009-06-12

自分なりのvimプラグイン管理方法

これは何?
いっぱい入れるととっちらかって、削除する時に大変な目にあうで有名なvimプラグイン そんなvimプラグインの自分なりの管理方法のメモです
未だ思考錯誤中の為、ご参考までに

目標
必要に応じて、pluginを簡単に追加、更新、削除できること
(簡単にpluginを試用、修正したい)

vim.orgで管理されているもの
vimの機能 GetLatestVimScripts を使うことで、簡単に追加、更新が可能です

Vim documentation: getscript

また、 以下のサイトでプラグインの検索、登録、GetLatestVimScripts.bat の自動生成が出来るので、ここでインストールしているプラグインを管理するのがオススメです
リンクは、かせいさんが登録している plugin

ユーザ - Vimpi

プラグインを削除したい場合は、全て削除して、GetLatestVimScripts.batを修正後、再度 GetLatestVimScripts するのが無難かしら?
このあたり、未だよい方法見つかってません

vim.orgで管理されていないもの
plugin 毎に別途ディレクトリを切って、.vimrc にて runtimepath に追加してやる方法を考案しました

こんな感じに .vim/otherPlugins の中に、プラグイン毎にディレクトリを切って…

.vim
  +- otherPlugins
    |
    +- eregex
    | +- doc
    | +- plugin
    |
    +- reloadfirefox
    | +- plugin
    |
    +-local // 自分で修正したプラグイン or 自作プラグイン
      +- plugin

んで、.vimrc にて以下のようなスクリプトを書いて、各ディレクトリを runtimepath に追加します

"---------------------------------------------------------------------
" GetLatest対象外プラグイン {{{
"---------------------------------------------------------------------
" ~/.vim/{pluginName}をruntimepathに追加
" runtimepathの初期化
set runtimepath&

function! s:SetOtherPluginsPath()
	"otherPlugins直下のディレクトリを取得"
	let dir = '~/$VIMFILE_DIR/otherPlugins/'
	let dirs = map(split(glob(fnamemodify(dir, ':p').'*/'), '\n'), 
		\	'fnamemodify(v:val, ":h")')

	"それらのafterも生成"
	let dirsAfter = map(copy(dirs), 'v:val."/after"')

	execute "set runtimepath&"
	let &runtimepath = join(dirs + [&runtimepath] + dirsAfter, ',')
endfunction

call s:SetOtherPluginsPath()
"}}}

これだと、プラグインの管理が楽になる他、pluginを試用したい時にも、適当なディレクトリを作って、配列に追加してやればよいので楽です

弱点

.vim/ 直下にあること前提らしいプラグインや、.vim/ の前に読み込むと挙動がおかしくなるプラグインは、.vim/ に置かざるをえませんでした
具体的には、autocomplpop を .vim/ 以外に置くと、snipMate が正しく動かなくなりました
いまいち理解が足りていないので、気が向いたら調査します

2009/06/15追記

ns9tksさんのトラバを参考にruntimepathを絶対pathで指定するようにしたところ上手く動きました(他にも原因があるかも…)

Re: 自分なりのvimプラグイン管理方法 - ns9log

vim.orgで取得した後に独自に改造したプラグイン
基本的には、vim.orgで管理されていないプラグインと同様に独自にディレクトリを切ります
但し、上記の理由で.vim直下に置かざるを得なかったものについては、アップデート時に間違えて上書きをしてもいいように、.bak にバックアップを取っておき、更新後に .bak の内容でマージします

まとめ
大体上記のような方法でプラグインを管理してます
もうちょっとエレガントな方法がありそうな気がするのですが、みなさんどうしてます?
みなさんのプラグイン管理方法をコメント頂けると感謝感激です

そんな感じです

トラバレス
私は

    * 一連のファイルをバージョン管理システムの配下に置く。
    * 必要に応じて作業ディレクトリから各種ファイルを~/.vim等に配置。
    * 試用したいプラグインがあれば~/.vim等の下に直接配置して試す。
          o 気に食わなければrm -rf ~/.vim等して作業ディレクトリから再配置。
          o 気に入ればバージョン管理システムの配下に置く。

プラグインのコードを含む全ての状態を再現可能にしたいのでGLVSは使えません。
Re: 自分なりのvimプラグイン管理方法 - かせいさんとこ - while (”im the true Vim master”); - vimグループ


超早なレスポンス感謝です!!
普通に、バージョン管理システムという手がありましたね…
どうにも、GLVSと、DropBoxにとらわれて思いつけませんでした

subversionでも使ったオレオレリポジトリによる管理も検討してみたいと思います。感謝です!!



自分もプラグインごとにディレクトリを分けて(ディレクトリ名はvim-*)、次のようなスクリプトで runtimepath に追加してます。

〜 中略 〜

> 具体的には、autocomplpop を .vim/ 以外に置くと、snipMate が正しく動かなくなりました

うちでは Windows と debian でどちらもちゃんと動いております。

Re: 自分なりのvimプラグイン管理方法 - ns9log

トラバどうもです!
> 自分もプラグインごとにディレクトリを分けて
仲間がいてよかったですw

> うちでは Windows と debian でどちらもちゃんと動いております。
上記スクリプトを参考に、runtimepathを絶対pathで指定してあげたら、
無事 autocomplop も、snipMate も無事動作するようになりました

vimscriptもあまり慣れていないのでリファレンスを読みながら勉強させてもらいました
mapやfilter等の配列操作系の関数の使い方がエレガントですねー
勉強になりました!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証