0

我有一个 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

如何按插入顺序订购完成?

4

1 回答 1

2

使用另一个 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安装,此代码将为您提供模糊路径完成 ala Command-T/ CtrlP

于 2013-03-04T16:40:42.313 回答