.png)
eu mudei parazshe achar que é melhor do quefesta, mas estou com um problemaoh-meu-zsh's (doravante "OMZ") recurso de preenchimento automático.
Quando digito git chec
, OMZ completa isso para git check
; emfestaele é concluído em git checkout
. Também tenho um problema com ramificações remotas: ori
concluídas para oriG
e orig
para origin
, emfestaele é concluído paraorigin/
Eu tenho o mesmo problema com outrosidiotacomandos como checkout
.
Acho que o problema é oapelidoadicionado pelo plugin. Eu não os uso, pois não quero me acostumar com eles, mas eles interrompem o preenchimento automático para mim.
Existe alguma maneira de obter ofestapreenchimento automático (eu sei que não existe um preenchimento automático integrado no bash) emzsh? Ou uma forma de hackear o plugin OMZ para que ele não quebre a cada atualização.
Responder1
A conclusão e de onde vem podem ser bastante confusas. Tomemos como exemplo um sistema Ubuntu 14.04:
$ dpkg -L zsh-common | grep git
/usr/share/zsh/functions/Completion/Debian/_git-buildpackage
/usr/share/zsh/functions/Completion/Unix/_stgit
/usr/share/zsh/functions/Completion/Unix/_git
/usr/share/zsh/functions/Completion/Unix/_topgit
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_get_data_git
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_detect_git
/usr/share/zsh/functions/Misc/run-help-git
O zsh-common
pacote inclui funções de conclusão do git. Por outro lado, o git
pacote também vem com arquivos de conclusão para bash e zsh:
$ dpkg -L git | grep compl
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk
Que contém arquivos como
$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <[email protected]>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.
O pacote git ainda fornece um prompt ciente do git que pode ser ativado, tudo sem complementos sofisticados, como oh-my-zsh.
Para resumir, a conclusão do subcomando git pode vir do seu shell (zsh):
https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git
do git
https://github.com/git/git/tree/master/contrib/completion
ou de plug-ins como oh-my-zsh.
Voltando à sua pergunta: o antigo comportamento de conclusão git chec
que você descreve é realmente problemático. chec
ainda é ambíguo e um script de conclusão adequado não deve concluí-lo checkout
, pois há vários subcomandos que começam com chec
. Se você deseja esse comportamento, descubra qual dos muitos scripts de conclusão que você estava usando antes, desative o plug-in git oh-my-zsh e continue a usar seu antigo script de conclusão.
Como alternativa, recomendo configurar um alias e se acostumar com ele. Você pode usar
git config --global alias.co checkout
para fazer git co
o seu novo git checkout
- o plugin oh-my-zsh está ciente desses aliases e ainda completará os nomes das ramificações e tags a seguir!