2010-09-26 81 views
11

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

作为一个例子,这里是我现在正在努力的,zshcompsys手册页没有提供任何说明。我有

#compdef mtt2 

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

现在,当我输入mtt2 <TAB>我只提供foobarbaz作为完井,为什么不-h--help等,以及? 我需要传递给_arguments以提供所有可能性吗?

+0

您需要键入'mtt2 - '如果你想看看选项。 – 2010-09-26 09:01:16

+0

@Bertrand,是的,这就是为什么我问这个问题,我想看到'mtt2 '上所有可能的完成。 – Magnus 2010-09-26 09:06:19

回答

5

你需要开始论点,你完成破折号(我的意思是你输入的测试参数,而不是_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控制完成的风格。它在“完成系统配置”一节中有描述,可能有一个选项可以完成开关,但我不知道哪个选项可以控制这个选项。
+1

你有没有我可以看一看的例子,所以我有机会理解你在说什么? ;-) – Magnus 2010-09-26 09:10:17

+0

我认为这意味着向不同选项(-h,-V,...)添加说明变得困难,这是否正确? – Magnus 2010-09-26 10:47:12

+0

@Magnus,使用'compadd'添加描述可能更简单,但在这个例子中并不太难。当您尝试提供一种方法来同时指定多个开关和参数时,您将面临问题。 – ZyX 2010-09-26 11:57:19

4

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

这背后登录墙,但是你没有指定...

+3

好吧,尽管[这些指导方针](http://meta.stackexchange.com/a/94027/154764)在这个答案中有一些欠缺,我发现上面的链接(a)**不是**要求我登录,并(b)给我一个我需要的出发点,以找出我完成时遇到的问题。因此,尽管它的简洁性和缺乏_direct_(即没有遵循链接)的有用性,我仍然赞同这个答案。谢谢你,@迈克尔! – lindes 2012-04-09 19:12:13