![zsh:如何使用特定顺序填充完成候选者](https://linux22.com/image/225940/zsh%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%89%B9%E5%AE%9A%E9%A1%BA%E5%BA%8F%E5%A1%AB%E5%85%85%E5%AE%8C%E6%88%90%E5%80%99%E9%80%89%E8%80%85.png)
我想用函数中指定的确切顺序填充完成候选。据我了解,-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。