Cómo obtener el autocompletado estilo bash en zsh (para el comando git)

Cómo obtener el autocompletado estilo bash en zsh (para el comando git)

me cambié azshy lo encuentro mejor queintento, pero tengo un problema conoh-mi-zsh's (en adelante "OMZ") función de autocompletar.

Cuando escribo git chec, OMZ lo completa para git check; enintentose completa a git checkout. También tengo un problema con las sucursales remotas: oricompletadas para oriGy origpara origin, enintentose completa paraorigin/

tengo el mismo problema con otrosgitcomandos como checkout.

Creo que el problema es elaliasagregado por el complemento. No los uso porque no quiero acostumbrarme a ellos, pero interrumpen la función de autocompletar.

¿Hay alguna manera de conseguir elintentoautocompletar (sé que no hay un autocompletado incorporado en bash) enzsh? O una forma de piratear el complemento OMZ para que no se rompa con cada actualización.

Respuesta1

La finalización y su origen pueden resultar bastante confusos. Tome un sistema Ubuntu 14.04 como ejemplo:

$ 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

El zsh-commonpaquete incluye funciones de finalización de git. Por otro lado, el gitpaquete también viene con archivos de finalización para bash y 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 contiene archivos 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.

El paquete git incluso proporciona un mensaje de reconocimiento de git que se puede habilitar, todo sin complementos sofisticados como oh-my-zsh.

En resumen, la finalización del subcomando git puede provenir de su shell (zsh):

https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git

de git

https://github.com/git/git/tree/master/contrib/completion

o desde complementos como oh-my-zsh.

Volviendo a su pregunta: el antiguo comportamiento de completar git checque usted describe en realidad tiene errores. checsigue siendo ambiguo y un script de finalización adecuado no debería completarlo checkout, ya que hay varios subcomandos que comienzan con chec. Si desea ese comportamiento, averigüe cuál de los muchos scripts de finalización que existen estaba usando antes, deshabilite el complemento git oh-my-zsh y continúe usando su antiguo script de finalización.

Alternativamente, recomendaría configurar un alias y acostumbrarse a él. Puedes usar

git config --global alias.co checkout

para crear git cosu nuevo git checkout: el complemento oh-my-zsh conoce estos alias y aún así completará los nombres de las ramas y etiquetas a continuación.

información relacionada