unite-outline で候補の絞り込みから選択へかけての打鍵数を減らす

unite-outline では、候補の絞り込みの際、見出しの親子関係に配慮し、マッチした見出しだけでなく、その親見出しも絞り込みの結果に残すようにしています。*1

これはメソッド名などで絞り込みを行ったときに、実際にマッチしたもの(メソッド)だけを残すと、絞り込みの結果からはその所属クラスがわからなくなってしまうという問題に対処したものです。


▲ 以前の絞り込み結果。絞り込み自体はうまくいっているが、所属するクラスがわからなくなってしまっている。複数のクラスに同名のメソッドがあったりした場合、これではまずい。



▲ 現在の絞り込み結果。親見出しも残るようになっているので、所属するクラスがわかる。


これにより、同名のメソッドが複数のクラスにあっても安心安心、というわけなのですが、上の画像を比較してもわかる通り、この場合、絞り込みの結果に(実際にはマッチしていない)親見出しが必ず含まれてくるため、目的の候補へと移動するために必要な打鍵数が増えてしまいます。

特に、モジュール定義、クラス定義の類が深くネストしている場合、目的のメソッドに到達するまでに何度も j を打鍵する必要があり、非常に面倒です。

そこで……

(実際にはマッチしていない)親見出しや、見出し一覧を見やすくするために挿入されている空行をスキップし、実際にマッチしている見出しだけを巡回できるキーマッピングを追加してみました。

追記

unite本体の側で同等のキーマッピングを用意してくれそうな感じなので、以下で紹介している unite-outline で用意したキーマッピングは早くも obsolete と化しました。*2

今回追加したキーマッピングはいずれ削除しますので、お手数ですが、その時には設定の書き換えをお願いします。(追記:2011-04-17)

追記2

上で予告していた通り、実際にマッチしていない候補を飛び越えるキーマッピングが unite.vim 本体の側で実装されましたので、↓で紹介しているような設定はもはや不要となりました。デフォルトキーマッピングで J, K にマップされています。(追記:2011-08-17)


.vim/after/ftplugin/unite.vim に以下のように設定します。*3

if unite#get_context().buffer_name ==# 'outline'
  nmap <buffer> J <Plug>(unite_source_outline_loop_cursor_down)
  nmap <buffer> K <Plug>(unite_source_outline_loop_cursor_up)
endif

このキーマッピングは、unite のバッファの buffer name が "outline" であるで始まる場合にのみ有効なので、unite-outline を呼び出す際には

:Unite -buffer-name=outline outline

とします。これで、絞り込みをかけてから J, K を打鍵すると、(実際にはマッチしていない)親見出しや空行を飛び越えて、マッチした見出しだけを巡回することができます。

*1:ツリーの親子関係に配慮した matcher は先月末に追加された機能です。

*2:とほほ。前にも似たようなことがあった気がする (^^;

*3:オプション変数と同様、名前が長くなってしまうのは source の宿命です (^^;