我想用函数中指定的确切顺序填充完成候选。据我了解,-o nosort
应该可以解决问题,但它没有按预期工作。我一定错过了一些非常基本的东西。那是什么?
autoload -Uz compinit && compinit -u
compdef _foo foo
_foo() {
compadd -o nosort -- ccc aaa bbb
}
% foo <Tab>
aaa bbb ccc
# Want: ccc aaa bbb
答案1
不知道为什么需要这样做,但添加一个团队名字via-J the-group-name
或-V the-group-name
( 的缩写-J the-group-name -o nosort
)有效。所以:
compadd -V 'foo operands' -- ccc aaa bbb
我从来没有真正花精力去了解完成系统的详细工作原理。当尝试定义一些自定义完成器时,我通常会查看 zsh 提供的完成器作为示例。这里grep -rw -- nosort $fpath
展示了一些使用它的完成者。这样做functions -t one-of-those-completers
可以跟踪该完成者,并显示如何为这些完成者调用 compadd。