ZSH: Use as conclusões para o comando x quando eu digito comando y
-
26-09-2019 - |
Pergunta
Em Zsh, eu tenho uma função chamada g
que age assim:
- Sem argumentos, ligue
git status
- Com um ou mais argumentos, delegue para fazer todos os argumentos - ou seja, ligue
git $@
Eu gostaria das conclusões da guia para g
para ser exatamente o mesmo que para git
. Eu posso conseguir isso com alias g=git
, mas isso não me permite ligar status
por padrão (o primeiro ponto acima).
Como posso delegar à conclusão para git
?
Em Bash, eu simplesmente fiz complete -F _git g
que reutiliza a função de conclusão do Git. Com o ZSH, a conclusão do Git parece muito mais complexa, e não consigo encontrar uma solução semelhante.
Eu acho que há alguma função no ZSH em dizer "Finja que digitei o comando [x], o que você completaria?". Se eu soubesse o que era, deveria ser simples o suficiente para usar uma função para delegar. Mas não encontrei essa função nos manuais.
Solução
A documentação para compdef
diz isso:
A função
compdef
pode ser usado para associar funções de conclusão existentes a novos comandos. Por exemplo,compdef _pids foo
Mas adaptando -o (_git
é a função de conclusão usual para git) não produziu um resultado funcional para mim (mesmo depois de _git
havia sido carregado automático):
compdef _git g
Eu era capaz de fazê -lo funcionar via _dispatch
no entanto:
compdef '_dispatch git git' g