2013-02-28 5 views
0

Я с завершающим ЗШЕМ, что обеспечивает ожидаемые доработки, но предоставляет их в лексикографическом порядке, в отличии от порядка, в котором они были добавлены через compadd:ЗШ порядок завершения

_matcher_complete() { 
    (git ls-files 2>/dev/null || find .) | /usr/local/bin/matcher -l20 ${words[CURRENT]} | while read line; do 
    compadd -U "$line" 
    done 
    compstate[insert]=menu 
} 

zle -C matcher-complete complete-word _generic 
zstyle ':completion:matcher-complete:*' completer _matcher_complete 
zstyle ':completion:matcher-complete:*' menu-select 

bindkey '^X^T' matcher-complete 

Как заказать пополнения по порядку вставки?

ответ

2

Использование другого завершения сценария ЗШ для вдохновения, я изменил функцию _matcher_complete на следующее:

_matcher_complete() { 
    integer i=1 
    (git ls-files 2>/dev/null || find .) | /usr/local/bin/matcher --limit 20 ${words[CURRENT]} | while read line; do 
    compadd -U -2 -V $i -- "$line" 
    i=$((i+1)) 
    done 
    compstate[insert]=menu 
} 

Примечание различные арг к compadd. У меня не было достаточно времени, чтобы на самом деле понять, что делает каждый флаг (см. man zshcompwid), но, похоже, вам нужно явно указать порядок (таким образом, использование функции $i в приведенной выше функции).

Предполагая, что у вас установлен matcher, этот код даст вам нечеткое завершение пути ala Command-T/CtrlP.