6 votes

Comment obtenir une autocomplétion de style bash dans zsh, (pour la commande git)

Je suis passé à zsh et le trouve meilleur que bash mais j'ai un problème avec oh-my-zsh (ci-après " OMZ ") de la fonction d'autocomplétion.

Quand je tape git chec OMZ complète cela en git check ; dans bash il est complété par git checkout . J'ai également un problème avec les branches distantes : ori complété à oriG y orig à origin en bash il est complété par origin/

J'ai le même problème avec d'autres git des commandes comme checkout .

Je pense que le problème est le alias ajouté par le plugin. Je ne les utilise pas, car je ne veux pas m'y habituer, mais ils cassent l'autocomplétion pour moi.

Y a-t-il un moyen d'obtenir le bash autocomplétion (je sais qu'il n'y a pas d'autocomplétion intégrée dans bash) en zsh ? Ou un moyen de pirater le plugin OMZ pour qu'il ne se casse pas à chaque mise à jour.

5voto

barbaz Points 2896

L'achèvement et son origine peuvent être assez confus. Prenons l'exemple d'un système 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

En zsh-common Le paquet contient des fonctions de complétion de git. D'autre part, le paquet git Le paquet est également fourni avec des fichiers de complétion pour bash et 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

Qui contient des fichiers tels que

$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.

Le paquet git fournit même une invite consciente de git qui peut être activée, le tout sans ajouts fantaisistes tels que oh-my-zsh.

Pour résumer, la complétion des sous-commandes git peut provenir de votre 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

ou à partir de plugins tels que oh-my-zsh.

Pour en revenir à votre question : L'ancien comportement consistant à compléter git chec que vous décrivez est en fait un bogue. chec est toujours ambiguë et une complétion correcte script ne devrait pas la compléter pour checkout puisqu'il existe plusieurs sous-commandes qui commencent par chec . Si vous voulez ce comportement, trouvez laquelle des nombreuses complétions scripts existantes vous utilisiez avant, désactivez le plugin git oh-my-zsh et continuez à utiliser votre ancienne complétion scripts.

Sinon, je vous recommande de créer un alias et de vous y habituer. Vous pouvez utiliser

git config --global alias.co checkout

de faire git co votre nouvelle git checkout - le plugin oh-my-zsh est conscient de ces alias et complètera toujours les noms de branches et de tags ensuite !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X