.png)
Ich wechselte zuzshund finde es besser alsSchlag, aber ich habe ein Problem mitoh mein Gott's (im Folgenden "OMZ") Autovervollständigungsfunktion.
Wenn ich eingebe git chec
, vervollständigt OMZ das zu git check
; inSchlages wird abgeschlossen zu git checkout
. Ich habe auch ein Problem mit Remote-Zweigen: ori
abgeschlossen zu oriG
, und orig
zu origin
, inSchlages wird abgeschlossen zuorigin/
Ich habe das gleiche Problem mit anderengitBefehle wie checkout
.
Ich denke, das Problem ist dieAliasevom Plugin hinzugefügt. Ich verwende sie nicht, da ich mich nicht daran gewöhnen möchte, aber sie stören bei mir die automatische Vervollständigung.
Gibt es eine Möglichkeit, dieSchlagAutovervollständigung (ich weiß, dass es in Bash keine integrierte Autovervollständigung gibt) inzsh? Oder eine Möglichkeit, das OMZ-Plugin zu hacken, damit es nicht bei jedem Update kaputt geht.
Antwort1
Die Vervollständigung und woher sie kommt, kann ziemlich verwirrend sein. Nehmen wir als Beispiel ein Ubuntu 14.04-System:
$ 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
Das zsh-common
Paket enthält Git-Vervollständigungsfunktionen. Andererseits git
enthält das Paket auch Vervollständigungsdateien für Bash und 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
Darin befinden sich Dateien wie
$ 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.
Das Git-Paket bietet sogar eine Git-fähige Eingabeaufforderung, die aktiviert werden kann, und das alles ohne ausgefallene Add-Ons wie oh-my-zsh.
Zusammenfassend lässt sich sagen, dass die Vervollständigung von Git-Unterbefehlen von Ihrer Shell (zsh) erfolgen kann:
https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git
von git
https://github.com/git/git/tree/master/contrib/completion
oder von Plugins wie oh-my-zsh.
Um auf Ihre Frage zurückzukommen: Das alte Vervollständigungsverhalten, git chec
das Sie beschreiben, ist tatsächlich fehlerhaft. chec
ist immer noch mehrdeutig und ein richtiges Vervollständigungsskript sollte es nicht zu vervollständigen checkout
, da es mehrere Unterbefehle gibt, die mit beginnen chec
. Wenn Sie dieses Verhalten wünschen, finden Sie heraus, welches der vielen Vervollständigungsskripte Sie zuvor verwendet haben, deaktivieren Sie das Git-Plugin oh-my-zsh und verwenden Sie weiterhin Ihr altes Vervollständigungsskript.
Alternativ empfehle ich, einen Alias einzurichten und sich daran zu gewöhnen. Sie können verwenden
git config --global alias.co checkout
um git co
Ihr Neues zu erstellen git checkout
– das Plugin „oh-my-zsh“ erkennt diese Aliase und vervollständigt als Nächstes trotzdem die Zweig- und Tag-Namen!