我正在将一些 tcsh 完成设置迁移到 zsh,但我对文档有点迷失。我想要的是用两种方式之一完成论证。如果当前要补全的单词不包含 a /
,则它应该是一组字符串中的一个。如果它确实包含/
,则它应该是一个目录。
这:
_foo() {
_arguments -C '1:Name:(Name1 Name2 Name3)' '1:Directory:_path_files -/'
}
不起作用,因为不允许指定两次相同的参数。我玩过,_regex_arguments
但我似乎错过了一些东西,因为我没有得到任何有意义的行为。
答案1
我最终得到:
#compdef foo
_foo() {
local curcontext="$curcontext" state line
typeset -A opt_args
_arguments -C '-a' '-b' '-c' '-d' '1: :->name'
case $state in
name)
case $words[2] in
*/*)
_arguments '*:directory:_path_files -/'
;;
*)
_arguments '*:name:(Name1 Name2 Name3)'
;;
esac
esac
}
_foo "$@"
但我不确定这是最好的解决方案。特别是,我从一些示例中复制了 的用法$words
,但在文档中没有找到它。