zsh: completamenti uso per comando X quando si digita il comando Y
-
26-09-2019 - |
Domanda
In zsh, ho una funzione chiamata g
che agisce in questo modo:
- senza argomenti, chiamata
git status
- con uno o più argomenti, delegato a git con tutte le date argomenti - vale a dire chiamata
git $@
Vorrei i completamenti scheda per g
di essere esattamente lo stesso che per git
. Posso raggiungere questo obiettivo con alias g=git
, ma che non mi permette di chiamare status
di default (il primo punto di cui sopra).
Come posso delegare al completamento per git
?
In bash, ho semplicemente fatto complete -F _git g
che riutilizza funzione di completamento di git. Con zsh, sguardi di completamento del Git molto più complesso, ed io wa non in grado di trovare una soluzione simile.
Direi c'è qualche funzione in zsh a dire "finta ho digitato il comando [x], cosa vorresti completare a?". Se sapessi cosa che fosse, dovrebbe essere abbastanza semplice da utilizzare una funzione di delegare ad esso. Ma non ho trovato alcun tale funzione nei manuali.
Soluzione
La documentazione per compdef
dice questo:
La
compdef
funzione può essere utilizzata per associare le funzioni di completamento esistenti con i nuovi comandi. Ad esempio,compdef _pids foo
Ma adattandolo (_git
è la funzione di completamento usuale per git ) non ha dato nessun risultato che lavora per me (anche dopo che era stato _git
autocaricate):
compdef _git g
sono stato in grado di farlo funzionare tramite _dispatch
però:
compdef '_dispatch git git' g