unite.vim で converter 後に matcher を呼び出す
前回 unite-filters の converter で表示形式を設定したんですが、同様の処理を word に対して行った場合、その word で絞り込みを行うことができません。
let s:filters = { \ "name" : "converter_add_updatetime", \ "description" : "add updatetime" \} function! s:filters.filter(candidates, context) let candidates = deepcopy(a:candidates) for candidate in candidates let updatetime = strftime("(%Y/%m/%d %H:%M:%S) ", getftime(candidate.action__path)) " abbr と word に更新日を追加する " この時に word で絞り込みを行いたいがうまく動作しない let candidate.abbr = updatetime . candidate.abbr let candidate.word = updatetime . candidate.word endfor return candidates endfunction call unite#define_filter(s:filters) unlet s:filters call unite#custom#source('file', 'converters', ["converter_add_updatetime"])
この問題は絞り込み(matcher)の後に converter が呼ばれるためです。
これは次のように converter → matcher の順で処理するように設定することで回避することができます。
" converters には特に設定する必要はない " call unite#custom#source('file', 'converters', ["converter_default"]) " matchers に対して converter を設定する call unite#custom#source('file', 'matchers', ["converter_add_updatetime", "matcher_default"])
unite-filters は奥が深いですね…。