我正在为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
不过,我不确定他们为什么要这样做。