2013-01-13 12 views
17

Ho un alias: alias gco='git checkout'Tab per i comandi secondari alias in zsh: alias GCO = 'git checkout'

Come posso aggiungere il completamento scheda come se avessi digitato git checkout?

Per il mio alias g='git' Io uso compdef g='git'.

Ho cercato di utilizzare compdef ma non ho avuto alcun successo.

+0

In zsh, semplicemente funziona per me non appena definisco un alias (senza 'compdef' o altro). Hai provato? –

+0

Sì, l'ho provato. Ho appena ottenuto il completamento del file. –

risposta

15

Non è necessario fare nulla, in particolare compdef g='git', dovrebbe funzionare senza alcuna configurazione. Avresti bisogno di qualcosa solo se hai usato la funzione al posto di un alias.

+1

Ho appena ottenuto il completamento del file. Ho notato che oh-my-zsh usa compdef; https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/git.plugin.zsh –

+3

@ WilliamBettridge-Radford Queste persone devono aver fatto qualcosa per disabilitare il comportamento predefinito o semplicemente svolgere un lavoro non necessario. Basta fare 'zsh -f autoload -Uz compinit compinit alias gco = 'git checkout' gco '. Vedo un elenco di ref in questo caso. Un altro test: 'alias g = 'git' compdef g = 'hg' g ': 'compdef' viene semplicemente ignorato, ottengo il completamento per git e non mercurial e sto avendo bisogno di' compdef git = 'hg'' per sovrascrivere il comportamento (ovviamente per entrambi gli alias e 'git'). – ZyX

+0

Ha funzionato, grazie gentilmente. Sto usando una fork di dotfiles da github. Penso che li spegnerò tutti e li aggiungerei lentamente. https://github.com/holman/dotfiles –

21

Disattivare questa opzione e sei anche bravo ...

# don't expand aliases _before_ completion has finished 
# like: git comm-[tab] 
# setopt complete_aliases 
+5

Questo ha fatto per me. Per chiarire, vuoi commentare questa riga in questa risposta, non rendere il tuo 'config.zsh' simile. Dovresti ** non ** impostare l'opzione complete_aliases se vuoi avere il completamento per gli alias. –

1

Per me l'aggiunta sia di complete_aliases e compdef è necessario per ottenere sotto frammento di lavoro:

alias docker-compose-dev='docker-compose -f docker-compose.yml -f docker-compose-dev.yml' 

compdef docker-compose-dev='docker-compose' 
setopt complete_aliases