2010-09-26 24 views
11

Il completamento di Zsh è una bestia piuttosto complessa, e trovo la pagina man molto difficile da leggere, in particolare mancano (semplici) esempi di tutte le varie forme optspec ecc. Non sono riuscito a trovare nulla online da solo, quindi aiuto sarebbe più apprezzatoRisorsa di completamento Zsh?

Ad esempio, ecco quello con cui sto lottando al momento e la pagina man zshcompsys non offre alcun chiarimento. Ho

#compdef mtt2 

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

Ora, quando digito mtt2 <TAB> sto offerto solo foo, bar e baz come completamenti, perché non -h, --help, ecc, così? Quale magia devo passare a _arguments per poterti offrire tutte le possibilità?

+0

è necessario digitare 'mtt2 - ' se voglio vedere le opzioni. –

+0

@Bertrand, sì esattamente, ed è per questo che ho posto la domanda, voglio vedere * tutti * i possibili completamenti su 'mtt2 '. – Magnus

risposta

5

È necessario iniziare l'argomento che si completa con trattino (intendo l'argomento che si digita per testare, non l'argomento _arguments). Si dovrebbe guardare zstyle, provare a passare -h e altri come :foobars: o anche utilizzare direttamente compadd. Esempi:

  1. direttamente utilizzando compadd:
     
    #compdef test 
    A=(-h --help -V --version foo bar baz) 
    compadd -a A 
    
  2. Passando -h e altri come :foobars::
     
    #compdef test 
    A=(-h --help -V --version) 
    _arguments \ 
        - foobars \ 
        ':foobars:(foo bar baz)' \ 
        - options \ 
        ":arguments:($A)" 
    
    o
     
    A=(-h --help -V --version foo bar baz) 
    _arguments \ 
        ":::($A)" 
    
  3. zstyle controlli stile di completamento. È descritto nella sezione «COMPLETION SYSTEM CONFIGURATION» in man zshcompsys e probabilmente ha un'opzione che consente di completare gli switch, ma non so quale opzione controlli.
+1

Hai un esempio che posso dare un'occhiata, quindi ho una possibilità di capire quello che stai dicendo? ;-) – Magnus

+0

Suppongo che questo significhi che aggiungere descrizioni alle diverse opzioni (-h, -V, ...) diventa difficile, è corretto? – Magnus

+0

@Magnus, l'aggiunta di descrizioni con 'compadd' è probabilmente più semplice, ma in questo esempio non è troppo difficile. Affronterai problemi quando proverai a fornire un modo per specificare più di un interruttore e un argomento contemporaneamente. – ZyX

4

ho trovato che questo è una buona introduzione: http://www.linux-mag.com/id/1106/

Si tratta di una procedura di accesso a parete, ma non ha specificato ...

+3

Bene, nonostante il fatto che [queste linee guida] (http://meta.stackexchange.com/a/94027/154764) sono un po 'sottoutilizzate in questa risposta, ho trovato il link sopra a (a) ** non ** Richiedimi di accedere e (b) forniscimi il punto di partenza di cui avevo bisogno per capire un problema che stavo avendo con il completamento. In quanto tale, sto inviando questa risposta, nonostante la sua brevità e la mancanza di utilità _direct_ (cioè senza seguire il collegamento). Grazie, @ Michael! – lindes