Wie kann man "git" nach "g" umbenennen, damit die Regeln für die Bash-Vervollständigung erhalten bleiben?

25

Wenn ich das mache:

alias g='git'

Ich verliere alle Vervollständigungsregeln (dh Verzweigungen und Fernbedienungen werden nicht mehr automatisch vervollständigt, wenn ich zum Beispiel nach dem Tippen die Tabulatortaste drücke g push o).

Paweł Gościcki
quelle
Obwohl ich keine Antwort für Sie habe, muss ich mir eine Minute Zeit nehmen und mich fragen, ob das Fehlen dieser beiden anderen Buchstaben Ihnen wirklich einen großen Vorteil verschafft.
Marco Ceppi
4
Sicher ist es das! Ich tippe 'g' wahrscheinlich mehr als 100 Mal am Tag.
Paweł Gościcki
3
Durch das Aliasing häufig verwendeter Kurzbefehle auf noch kürzere Aliase kann ich täglich Hunderte von Tastendrücken einsparen. Laut meinem Shell-Verlauf habe ich den Alias g=gitim letzten Monat 756-mal verwendet, was bedeutet, dass ich 1512-mal insgesamt das Drücken der Tasten 'g' und 'i' gespart habe. Zusammen mit meinen Aliasnamen erspart mir das wahrscheinlich Zehntausende von Tastendrücken pro Monat.
Der wichtigste Punkt beim Verkürzen von Tastenanschlägen ist, dass Ihre Hände mit Ihrem Gehirn Schritt halten.
Tyler Collier
Das Skript unter superuser.com/questions/436314/… hat so gut funktioniert, dass es meiner Meinung nach eine Erwähnung verdient.
Brandizzi

Antworten:

21

Fügen Sie beim Kopieren und Ändern von /etc/bash_completion.d/gitdie folgenden Zeilen hinzu ~/.bashrc:

complete -o bashdefault -o default -o nospace -F _git g 2>/dev/null \
    || complete -o default -o nospace -F _git g
Enzotib
quelle
Ha! Wunderbar! Funktioniert so wie es sollte :)
Paweł Gościcki
1
Ich musste auch source /usr/share/bash-completion/completions/gitzu meinem .bashrc
pcx
Ich bin nicht sicher, ob der .bashrcCode hier funktioniert, aber diese Antwort ist definitiv veraltet. /etc/bash_completion.d/gitscheint am 14.04. nicht zu existieren Siehe die Antwort von lzap unten.
Max Wallace
18

Die letzte Bash-Vervollständigung im Upstream wurde verschoben und ein wenig umbenannt. Es schneit:

source /usr/share/bash-completion/completions/git
__git_complete g __git_main

Verwenden Sie dies in neueren Versionen von Ubuntu (zB 14.04, auch Fedora 22+), wenn Sie auf Folgendes stoßen:

completion: function `_git' not found

während des Abschlusses.

lzap
quelle
2
Scheint, als wäre dies hier die einzig richtige Antwort.
pjvandehaar
Verwenden Sie __git_complete gc _git_checkout(oder ähnliches), um Vervollständigungen für spezifischere Aliase einzurichten. Suchen Sie /usr/.../gitwie oben, um den richtigen Namen zu finden.
Max Wallace
1
@MaxWallace - Wenn Sie die Aliase für bestimmte Git-Methoden in .gitconfig festlegen (z. B. gc = checkout), müssen Sie die Vervollständigung für diese nicht explizit konfigurieren.
Piotr Aleksander Chmielowski
1
@PiotrAleksanderChmielowski Danke! Aber ich denke nicht, dass dies für Top-Level-Bash-Aliase (z. B. gc=> git checkout) funktioniert, im Gegensatz zum Aliasing cnach checkoutinnen gitund zum Sprichwort git c. Korrigiere mich, wenn ich falsch liege.
Max Wallace
@ MaxWallace Ja, du hast recht, mein Fehler;)
Piotr Aleksander Chmielowski
2

Rufen Sie zunächst den ursprünglichen Abschlussbefehl auf. Beispiel:

$ complete | grep git

complete -o bashdefault -o default -o nospace -F __git_wrap__git_main git

Fügen Sie diese nun Ihrem Startskript hinzu (zB ~ / .bashrc):

# copy the original statement, but replace the last command (git) with your alias (g)
complete -o bashdefault -o default -o nospace -F __git_wrap__git_main g

# load dynamically loaded completion functions (may not be required)
_completion_loader git

Die _completion_loaderLeitung ist möglicherweise nicht erforderlich. In einigen Situationen wird die Vervollständigungsfunktion jedoch erst dynamisch geladen, nachdem Sie den Befehl eingegeben und TABdas erste Mal gedrückt haben. Wenn Sie also den ursprünglichen Befehl nicht verwendet haben und den Alias ​​+ versuchen TAB, wird möglicherweise die Fehlermeldung "bash: completion: function not found" angezeigt.

weises Glück
quelle
Funktioniert super. Für mich ist das die richtige Antwort, der Befehl grep on complete ist praktisch. Benötigte den Completion Loader nicht.
Paul Carlton
1

Der aktualisierte Weg dies zu tun (komplett würde bei mir nicht funktionieren):

  1. cd - Wechseln Sie in Ihr Home-Verzeichnis
  2. wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
  3. Fügen Sie source ~/git-completion.bashIhrer .bashrc-Datei hinzu (wenn Sie diese Datei nicht in Ihrem Home-Ordner haben, sucht bash automatisch danach)
  4. Fügen Sie alias g='git'Ihrer .bashrc-Datei hinzu.
  5. Starten Sie eine neue Sitzung oder geben Sie Ihre Änderungen mit ein source ~/.bashrc
Elijah Lynn
quelle
2
Sie haben den Teil übersprungen, in dem die Vervollständigung in dem von Ihnen verlinkten Kommentar tatsächlich hinzugefügt wurde:__git_complete g _git
pjvandehaar
0

Der Vollständigkeit halber möchte ich eine Antwort mit der ~/.bash-completionDatei hinzufügen , die am Ende des Bash-Completion-Skripts abgerufen wird:

_xfunc git __git_complete g __git_main
_xfunc git __git_complete gl _git_log
_xfunc git __git_complete gd _git_diff
_xfunc git __git_complete gb _git_branch

Dann habe ~/.bashrcich in meinem nur die Aliase. Ich versuchte zu:

  • Vermeiden Sie es, mich ~/.bashrcmit Bash-Completion- Dingen zu belasten (bewahren Sie die Dinge dort auf, wo sie hingehören). ✓
  • Vermeide es, die ganze Git-Vervollständigung in meine Shell zu bringen

Leider quellen die _xfuncQuellen die Git-Vervollständigung trotzdem. Ich werde diese Antwort aktualisieren , sobald ich herausfinden , wie es richtig zu machen (ich fragte auch auf lunchpad hier ).

kub1x
quelle
-1

Schau mal hier: https://gist.github.com/scue/576310b7c6b7714aad05

wget https://gist.github.com/scue/576310b7c6b7714aad05/raw/459d46761c231f5c373c1cf496920b01bb6669d2/.bash_aliases.git -O ~/.bash_aliases.git
echo "test -e ~/.bash_aliases.git && source ~/.bash_aliases.git" >> ~/.bashrc

Viel Spaß! (^ O ^) /

scue
quelle
1
Sorry, aber das ist etwas ganz anderes. Solche einfachen Aliasnamen für ganze Befehle zu erstellen, ist trivial.
Paweł Gościcki
Ich mache sie einfach funktionieren wie Git - Plugin von Oh-My-Zsh: github.com/robbyrussell/oh-my-zsh/blob/master/plugins/git/...
SCUE
-1

Sie können einfach wie gewohnt Aliase definieren:

alias g='git'

Installieren Sie dann den vollständigen Alias , um den Alias für die Bash-Fertigstellung zu aktivieren.

Cyker
quelle