2009-02-18
coderepos で使ってるプラグインと、手元の vimperator のプラグインを同期するスクリプト
適当に書いた。プラグイン管理機能ほしいなー。あと GM みたいに簡単にプラグインをインストールできる機構があれば。
vimperator の環境を別マシンでも使い回すよ
いまの管理方法はこんな感じ。
vimperator ディレクトリ以下を、バージョン管理システムなんかに突っ込む。~/vimperator/info 以外全部つっこんでいいとおもう。
んで、~/.vimperatorrc ( ~/_vimperatorrc ) に一行、以下の用に書けば、別環境で持ち回せて使える。
source! ~/vimperator/vimperatorrc
つっこむディレクトリ構造はこんな。
vimperator
|-- colors
| |-- default.vimp
| |-- myevening.vimp
| `-- sweets.vimp
|-- plugin
| |-- _libly.js
| |-- auto_reload.js
| |-- auto_source.js
| |-- copy.js
| |-- cpan-search.js
| |-- google-search.js
| |-- hatena-bookmark-search.js
| |-- hints-yank-paste.js
| |-- history-search-backward.js
| |-- ime_controller.js
| |-- migemo_completion.js
| |-- migemo_hint.js
| |-- nextlink.js
| |-- options-migrate-user-pref.js
| |-- tinymenu.js
| |-- walk-input.js
| `-- xpath_hint.js
`-- vimperatorrc
vimperator で context を指定して eval する
anekos さんに教えてもらった。
一度 liberater.eval のコンテキスト指定での実行を試してみてうまくいかない、と思ったんだけど再びやってみたらできた。あれれ。内部実装は SubScriptLoader 経由で、指定した context を引数に、SubScriptLoader 内部で eval という素敵力業なことをやっている。
で、この liberater.eval は便利なんだけど、あくまで第一引数が string のため使いにくい。のでこんな関数を書いてみた。
let evalWithContext = function(func, context) {
let str;
let fstr = func.toString();
if (fstr.indexOf('function () {') == 0) {
str = fstr.replace(/.*?{([\s\S]+)}.*?/m, "$1");
} else {
str = '(' + fstr + ')()';
}
return liberator.eval(str, context);
}
これを使うと、
evalWithContext(function() {
foobar = 'baz';
}, context);
とか
evalWithContext(function() foobar = 'baz', context);
のように、普通に関数を渡すことができるようになる。ちなみに最後に評価された値が戻り値として帰ってくる。
vimperator で bash like なコマンドラインヒストリ検索を行うプラグイン作った
これを入れると、bash ぽくコマンドライン上で C-r でヒストリ検索を行えるように。本当は set wildoptions="auto" を指定していなくてもインクリメンタルに検索できるようにしたかったんだけど、アクセスできないローカル変数でいろいろやってるので無理っぽかった。コンテキスト指定の eval が firefox 3.0 でも使えたらなぁ。
むりくり wildeoptions=auto でも incsearch するようにしたよ!