具有嵌套控制函数的 ZSH 补全



我正在为zsh编写完成函数。我以cargo完成函数作为我的基础。在大多数情况下,除了-h--help选项外,它工作正常。这些函数的完成输出未对齐并重复多次(如下所示(。这只发生在控制功能(_describe_arguments等(存在于外壳结构中时。 为什么会发生这种情况,我该如何解决此行为?

补全功能:

#compdef test
_test() {
local context state state_descr line
typeset -A opt_args
_arguments 
"(- 1 *)"{-h,--help}"[Help]" 
"1: :->command" 
"*:: :->args"
case $state in
command)
_alternative 'arguments:custom arg:(a b c)'
;;
args)
_arguments 
"-a[All]" 
"-n[None]"
esac
}
_test

外壳输出:

> test -[TAB]
--help
-h
-- Help
--help
-h
-- Help
--help
-h
-- Help

我刚刚遇到了同样的问题。解决方案是从完成函数返回零:

#compdef test
_test() {
...
return 0
}
_test

我见过的所有完成脚本都使用ret变量,该变量最初是1的,如果有任何完成函数成功,则设置为0

#compdef test
_test() {
local context state state_descr line
local ret=1
typeset -A opt_args
_arguments 
"(- 1 *)"{-h,--help}"[Help]" 
"1: :->command" 
"*:: :->args" && ret=0
case $state in
command)
_alternative 'arguments:custom arg:(a b c)' && ret=0
;;
args)
_arguments 
"-a[All]" 
"-n[None]" && ret=0
esac
return ret
}
_test

不过,我不确定他们为什么要这样做。

最新更新