Порядок выполнения ЗШ

У меня есть компилятор ZSH, который обеспечивает ожидаемые завершения, но предоставляет их в лексикографическом порядке, в отличие от порядка, в котором они были добавлены через 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

Как я могу упорядочить завершения по порядку размещения?


person Charles    schedule 28.02.2013    source источник


Ответы (1)


Используя для вдохновения другой скрипт завершения ZSH, я изменил функцию _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, этот код даст вам завершение нечеткого пути в стиле Command-T/CtrlP< /а>.

person Charles    schedule 04.03.2013