while ("im the true Vim master");

2008-11-06

Re: はずれ

12:12

さすがにVImは仕方ないですね。個人的には全然アンテナを張ってない領域なので、その手のエントリーに遭遇したときはある意味楽しいです。

むしろvimperatorネタの方がひじょーにのいじーで困る。はてなの中の人は早急に/vim/ではなく/\<vim\>/でチェックするように修正すべき。


arpeggioとsmartchrを共存する場合の設定サンプル

| 10:36

インサートモードにキーをマッピングした際、smartchrと設定がぶつかると同時押しが聞かない。

arpeggio.vimを入れてみる - :set titlestring=秀丸

arpeggiosmartchrの定義をそのまま並べた場合、両者が同一のキーを含んでいると、後に書かれた定義が先に書かれた定義を上書きしてしまい、結果としてarpeggioとsmartchrのうち片方だけが有効になってしまいます。

例えば以下の設定では=を含む同時押しができなくなってしまいます*1:

" 駄目な例 - "="について競合が起きる
Arpeggioinoremap -=  Super Perrine Time
inoremap <expr> =  smartchr#one_of(' = ', ' == ', '=')

ですが、両者を共存できるような仕組み<Plug>(arpeggio-default:{X})が用意されています。上記の設定を共存させる場合は以下のように記述します(定義の順番は任意です):

" 正しい例
Arpeggioinoremap -=  Super Perrine Time
inoremap <expr> <Plug>(arpeggio-default:=)  smartchr#one_of(' = ', ' == ', '=')

同時押しとは認識されなかったキー{X}<Plug>(arpeggio-default:{X})にmapされるようになっています。これを用いることで同時押しではなかった場合のキーの動作をカスタマイズすることができます。デフォルトでは<Plug>(arpeggio-default:{X}){X}にmapされるようになっています(つまり{X}のデフォルトの動作が実行される)。

まとめ: 同時押しされる可能性のあるキー{X}から始まるkey mappingを定義する場合、{X}の代わりに<Plug>(arpeggio-default:{X})を使うこと。

*1:正確には同時押しされたキーのうち、最初のものが=である場合、それが同時押しとして認識されません。

トラックバック - http://vim.g.hatena.ne.jp/ka-nacht/20081106
最近のコメント
あわせて読みたいブログパーツ
AX