exコマンドの入力待ちになるmappingを使うとwildoptions=auto時に一瞬補完が表示されてウザい件の対策

Vimperatorのwildoptions=autoを有効にすると,exコマンドを実行するマッピングで一瞬だけ補完候補が表示されて邪魔になることがあるけど,id:Trapezoidさんの以下の記事にあるすばらしい設定を使うとそれを抑止することができる.


wildoptions=auto時に一瞬補完が表示されてウザいmapがある


これはすごく便利!ありがたく使わせてもらってます!


ただ,この方法だとキーを押したあとにexコマンドを途中まで入力して入力待ちにする,といったマッピングを作ることができない.マッピングされたコマンドをexecuteしてしまうので入力待ちになってくれない.ぐぬぬ.

で,いろいろググってみたけど結局対策方法が見つからなかったので,自分で設定を書いてみた.


例えば,以下のマッピングの補完対策をする場合,

noremap m :qmark<Space>
noremap A :sbm<Space>[

.vimperatorrcの上記の設定をコメントアウトして,以下のように書けばOK.

javascript <<EOM
[
    ['m',':qmark '],
    ['A',':sbm ['],
].forEach(function([key,command]){
    liberator.mappings.addUserMap([liberator.modes.NORMAL], [key],
        "User defined mapping",
        function () { liberator.commandline.open(command.substring(0, 1), command.substring(1), liberator.modes.EX); },
        {   
            rhs: command,
            noremap: true
        }); 
});
EOM

これでキーを押した後にチカチカせずに入力待ちになってくれる!
通常のマッピングと違ってはスペースに展開されないので,['m',':qmark ']のように直接スペースを書く点に注意.


この設定を書くためにFirefoxのextensionディレクトリからvimperator.jarを取ってきてunzipしてソースを読むなどした.その結果, liberator.commandline.open() を使えばうまくいきそう?と思って設定を書いたらちゃんと動いた.id:Trapezoidさんのスクリプトとほとんど変わってないけど結構苦労したよ….


これでid:tor_ozaki"noremap o :open ."パラパラ漫画にならないで済むよ!やったね!


続きあります.
続・exコマンドの入力待ちになるmappingを使うとwildoptions=auto時に一瞬補完が表示されてウザい件の対策


(追記 2008/11/23 18:02)
環境はMac OS X 10.5.5のVimperator 1.2 with Firefox 3.0.4です.
id:teramakoさんより,Vimperator 2.0preではこの件は改良されているとはてブでコメントいただきました.情報ありがとうございました.
Vimperator 2.0preもそろそろ試してみたいです.


(追記 2008/10/24 18:45)
id:suVeneさんより,「rhs は key より、command がいいと思う」とのはてブコメントをいただきました.
rhsは:mapコマンドでキーマッピング一覧を表示させたときのマッピング先の説明部分に対応するみたいです.マッピング先の説明なのにマッピング元のkeyが表示されるのは不適切なので,記事のスクリプトをrhs: commandに修正しました.
ご指摘ありがとうございました.