Zsh完成资源?

Mag*_*nus 11 zsh tab-completion

Zsh完成是一个相当复杂的野兽,我发现man-page非常难以阅读,特别是它缺少(简单)所有各种optspec表单等的例子.我还没有设法在网上找到任何东西,所以帮助将是非常感谢.

作为一个例子,这是我目前正在努力解决的问题,并且该zshcompsys手册页没有提供任何澄清.我有

#compdef mtt2

_arguments -s : \
    '-h' '--help' \
    '-V' '--version' \
    ':foobars:(foo bar baz)'
Run Code Online (Sandbox Code Playgroud)

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

ZyX*_*ZyX 5

你需要开始用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,可能有一个选项,可以完成开关,但我不知道哪个选项控制它.