完成:多个类似选项

时间:2013-08-31 16:23:54

标签: zsh zsh-completion

我想为一个以--with-PROG=--PROG-options作为可选参数的程序编写完成。 PROG可能是不同的程序之一。有许多不同的程序,所以我想避免手动写出每个程序的选项。我确实尝试了以下内容:

#compdef hello

typeset -A opt_args
local context state line

_hello()
{
    typeset -a PROGS
    PROGS=('gcc' 'make')
    _arguments \
        '--with-'${^PROGS}'[path to PROG]:executable:_files' \
        '--'${^PROGS}'-options[PROG options]:string:'
}

输出:

$ hello --gcc-options
--make-options  --gcc-options  -- PROG  options                                                                                                                          
--with-make     --with-gcc     -- path to PROG

但是,我希望将每个单独的选项放在单独的行上,并将PROG替换为程序名称。最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您需要对_arguments使用数组保持参数:

_hello()
{
    emulate -L zsh
    local -a args_args
    local prog
    for prog in gcc make ; do
        args_args+=( 
            "--with-${prog}[path to $prog]:executable:_files"
            "--${prog}-options[$prog options]:string:"
        )
    done
    _arguments $args_args
}