So erhalten Sie die automatische Vervollständigung im Bash-Stil in zsh (für Git-Befehle)

So erhalten Sie die automatische Vervollständigung im Bash-Stil in zsh (für Git-Befehle)

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: oriabgeschlossen zu oriG, und origzu 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-commonPaket enthält Git-Vervollständigungsfunktionen. Andererseits gitenthä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 checdas Sie beschreiben, ist tatsächlich fehlerhaft. checist 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 coIhr 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!

verwandte Informationen