So erhalten Sie die automatische Vervollständigung im Bash-Stil in zsh (für den Befehl git) - bash, shell, git, zsh, autocomplete

Ich wechselte zu zsh und finde es besser als Bash, aber ich habe ein Problem mit oh-my-zsh"s (hiernach"OMZ") Autovervollständigungsfunktion.

Wenn ich tippe git chec, OMZ vervollständigt das zu git check; im Bash es wird zu vervollständigen git checkout. Ich habe auch ein Problem mit entfernten Zweigen: ori abgeschlossen bis oriG, und orig zu origin, im Bash es wird zu vervollständigen origin/

Ich habe das gleiche Problem mit anderen git Befehle wie checkout.

Ich denke das Problem ist das Aliase vom Plugin hinzugefügt. Ich benutze sie nicht, da ich mich nicht an sie gewöhnen möchte, aber sie unterbrechen die automatische Vervollständigung für mich.

Gibt es eine Möglichkeit, die zu bekommen? Bash Autocomplete (ich weiß, dass es kein eingebautes Autocomplete in Bash gibt) in zsh? Oder eine Möglichkeit, das OMZ - Plugin zu hacken, damit es nicht bei jedem Update kaputt geht.

Antworten:

4 fĂĽr Antwort â„– 1

Die Fertigstellung und woher sie kommt, kann ziemlich verwirrend sein. Nehmen Sie 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 versendet Git-Vervollständigungsfunktionen. Auf der anderen Seite die git Das Paket enthält auch Abschlussdateien 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

Welche 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, alles ohne ausgefallene Addons wie oh-my-zsh.

Zusammenfassend kann die Vervollständigung des git-Unterbefehls aus Ihrer Shell stammen (zsh):

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

vom 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 Verhalten des Abschlusses git chec dass Sie beschreiben, ist eigentlich fehlerhaft. chec ist immer noch nicht eindeutig und ein korrektes Abschlussskript sollte es nicht vervollständigen checkout, da es mehrere Unterbefehle gibt, die mit beginnen chec. Wenn Sie dieses Verhalten möchten, finden Sie heraus, welches der vielen Vervollständigungsskripte Sie zuvor verwendet haben, deaktivieren Sie das Oh-My-Zsh-Git-Plugin und verwenden Sie weiterhin Ihr altes Vervollständigungsskript.

Alternativ würde ich empfehlen, einen Alias ​​einzurichten und sich daran zu gewöhnen. Sie können verwenden

git config --global alias.co checkout

zu machen git co dein neues git checkout - Das oh-my-zsh-Plugin kennt diese Aliase und wird weiterhin die Namen der Zweige und Tags ergänzen!


Lies jetzt