ZSH的完成是一只相当复杂的野兽,我发现该页面很难阅读,尤其是所有各种Optspec表格等的缺失(简单)示例等。我尚未设法在网上找到任何东西,所以帮助您最受欢迎。

例如,这就是我目前正在努力的事情, zshcompsys 人页没有提供任何澄清。我有

#compdef mtt2

_arguments -s : \
    '-h' '--help' \
    '-V' '--version' \
    ':foobars:(foo bar baz)'

现在,当我输入 mtt2 <TAB> 我只有 foo, barbaz 作为完成,为什么不 -h, --help, 等等?我需要传递什么魔术 _arguments 为了提供所有可能性?

有帮助吗?

解决方案

您需要开始参数,即您使用Dash(我的意思是您要进行测试的论点,而不是 _arguments 争论)。你应该看 zstyle, ,尝试通过 -h 和其他人一样 :foobars: 甚至直接使用 compadd. 。例子:

  1. 直接使用compadd:
    #compdef test
    A=( -h --help -V --version foo bar baz )
    compadd -a A
    
  2. 通过 -h 和其他人一样 :foobars::
    #compdef test
    A=( -h --help -V --version )
    _arguments \
        - foobars \
        ':foobars:(foo bar baz)' \
        - options \
        ":arguments:($A)"
    
    或者
    A=( -h --help -V --version foo bar baz )
    _arguments \
        ":::($A)"
    
  3. zstyle 控制完成样式。它在“完成系统配置”中描述 man zshcompsys 并且可能有一个可以完成交换机的选项,但我不知道哪个选项可以控制它。

其他提示

我发现这是一个很好的介绍: http://www.linux-mag.com/id/1106/

它是登录墙的后面,但您没有指定...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top