Como obter o preenchimento automático no estilo bash no zsh, (para o comando git)

Como obter o preenchimento automático no estilo bash no zsh, (para o comando git)

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: oriconcluídas para oriGe origpara 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-commonpacote inclui funções de conclusão do git. Por outro lado, o gitpacote 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 checque você descreve é ​​realmente problemático. checainda é 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 coo 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!

informação relacionada