在两个完成列表之间进行选择

在两个完成列表之间进行选择

我正在将一些 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,但在文档中没有找到它。

相关内容