Ein typisches Beispiel:
Ich bin ein Mac mit bash v3.2.17 und verwende git, das über macports mit der Variante bash_completion installiert wurde.
Wenn ich tippe git checkout m<tab>
. Zum Beispiel bekomme ich es fertig master
.
Ich habe jedoch einen Alias für git checkout
, gco
. Wenn ich tippe gco m<tab>
, wird der Filialname nicht automatisch vervollständigt.
Idealerweise möchte ich, dass die automatische Vervollständigung auf magische Weise für alle meine Aliase funktioniert. Ist es möglich? Andernfalls möchte ich es manuell für jeden Alias anpassen. Also, wie gehe ich vor?
Antworten:
Wie in den obigen Kommentaren angegeben,
wird nicht mehr funktionieren. In
__git_complete
git-vervollständigung.bash gibt es jedoch eine Funktion, mit der die Vervollständigung für Aliase wie die folgende eingerichtet werden kann:quelle
__git_complete g __git_main
, damit die Code-Vervollständigung für alle git-Befehle funktioniert.git-completion.bash
von<your git install folder>/etc/bash-completion.d/
nach~/.git-completion.bash
Schritt 2) Hinzufügensource ~/.git-completion.bash
zu Ihrem.bash_profile
Schritt 3) Hinzufügen__git_complete gco _git_checkout
nach der obigen Zeile in Ihrem .bash_profile. Schritt 4) Starten Sie die Shell neu und genießen Sie die automatische Vervollständigung Ihres Alias! :)Ich bin auch auf dieses Problem gestoßen und habe mir dieses Code-Snippet ausgedacht. Dadurch erhalten Sie automatisch eine Vervollständigung für alle Aliase. Führen Sie es aus, nachdem Sie alle (oder einen beliebigen) Alias deklariert haben.
quelle
let COMP_CWORD+=$num_alias_arguments
funktionierte unter Mac OS X aus irgendeinem Grund nicht. Ersetzen Sie es durch((COMP_CWORD+=$num_alias_arguments))
behobenwrap_alias
Drosseln in doppelten Anführungszeichen in der Alias-Definition, und ich denke, dass es für Aliase mit mehreren Befehlen (alias 'foo=bar; baz'
) nicht viel Sinn macht , also setze ich ein Extra| grep -v '[";|&]'
nach demalias -p
. Außerdem wird es für Hunderte von Alias-Definitionen etwas langsam, aber ich bin froh zu bestätigen, dass die Verwendungecho
anstelle voneval
und das Weiterleiten der Ausgabe in eine Cache-Datei (die danneval
auf einmal bearbeitet werden kann) gut funktioniert und superschnell ist .wrap_alias
Erfordert die Einrichtung der Vervollständigungen, sodass ich michsource /etc/bash_completion
vor denwrap_alias
Code stellen musste.let COMP_CWORD+=$num_alias_arguments
auf geändert wurdelet \"COMP_CWORD+=$num_alias_arguments\"
.Darin
git-completion.bash
steht eine Zeile:Wenn Sie sich diese Zeile (und die Funktion _git) ansehen, können Sie diese Zeile zu Ihrer hinzufügen
.bash_profile
:quelle
Ich habe g = 'git' aliasiert und in Kombination mit meinen git-Aliasen Dinge wie
Die einfachere Lösung für meinen speziellen Anwendungsfall bestand darin, der Git-Vervollständigung eine einzelne Zeile hinzuzufügen.
Direkt unter dieser Zeile:
Ich habe diese Zeile hinzugefügt, um meinen einzelnen 'g'-Alias zu behandeln:
quelle
git-completion
oder diese Zeile nicht finden/etc/bash_completion.d/git
, aber ich habe siecomplete -o default -o nospace -F _git g
nach meinem Alias hinzugefügt.bash_aliases
und es hat funktioniert!/etc/bash-completion.d/
oder neu in bearbeiten/usr/share/bash-completion/
, wenn diese Datei mit Ihrem Paketmanager aktualisiert wird.Ja, dies ist mit dem Complete-Alias- Projekt (unter Linux) möglich. Die Unterstützung für Mac ist experimentell, aber Benutzer haben über Erfolge berichtet.
quelle
Sie können auch versuchen, Git-Aliase zu verwenden. In meiner
~/.gitconfig
Datei befindet sich beispielsweise ein Abschnitt, der folgendermaßen aussieht:Sie könnten also tippen
git co m<TAB>
, und das sollte erweitert werdengit co master
, was dergit checkout
Befehl ist.quelle
Diese Forenseite zeigt eine Lösung.
Fügen Sie diese Zeilen in Ihr
.bashrc
oder ein.bash_profile
:Diese Lösung ähnelt dem Skript von Balshetzer , aber nur diese funktioniert tatsächlich für mich. (Balshetzers Skript hatte Probleme mit einigen meiner Aliase.)
quelle
-bash: eval: line 28: unexpected EOF while looking for matching '''
-bash: eval: line 29: syntax error: unexpected end of file
"
Anführungszeichen in derfunction
Zeichenfolge sollten als zitiert werden\"
. Dies frisst wahrscheinlich eines Ihrer'
Zitate irgendwo auf der Linie.Eine weitere Option ist die Verwendung einer
~/.bash_completion
Datei. So erstellen Sie dengco
Alias für das Einfügengit checkout
:Dann müssen
~/.bashrc
Sie nur den Alias selbst eingeben:Zwei Linien. Das ist es.
Erläuterung:
Das
~/bash_completion
wird am Ende des Hauptskripts bash_completion bezogen. In Gentoo fand ich das Hauptskript in/usr/share/bash-completion/bash_completion
.Das
_xfunc git
Bit kümmert sich darum, diegit-completion
Datei für Sie zu beschaffen , sodass Sie nichts anderes eingeben müssen~/.bashrc
.Die akzeptierte Antwort erfordert, dass Sie sie kopieren
.git-completion.sh
und aus Ihrer~/.bashrc
Datei beziehen, die ich lahm finde.PS: Ich versuche immer noch herauszufinden, wie ich nicht das gesamte
git-completion
Skript in meine Bash-Umgebung einbinden kann. Bitte kommentieren oder bearbeiten Sie, wenn Sie einen Weg finden.quelle
_xfunc git
erforderlich?source ~/.git-completion.sh
lasse_xfunc
ich es für mich tun. Es fühlt sich einfach schöner und sauberer an, es nur in zu tun~/.bash_completion
. Ohne das_xfunc
(oder das Sourcing) existiert die__git_complete
Funktion nicht.~/.bash_completion
Datei - die_xfunc
Zeile funktioniert für mich in.bashrc
.Sie müssen nur den
complete
Befehl finden und stattdessen die Zeile mit dem Aliasnamen duplizieren.Ich habe
alias d-m="docker-machine"
. In Wortend-m
soll der Alias für seindocker-machine
.Auf dem Mac (über Brew) befinden sich die Abschlussdateien in
cd `brew --prefix`/etc/bash_completion.d/
.Für meinen Fall habe ich die aufgerufene Datei bearbeitet
docker-machine
.Ganz unten war:
Also habe ich einfach eine weitere Zeile mit meinem Alias hinzugefügt:
quelle
docker
zd
. Obwohl für das Beispiel in der Frage dasgit checkout
Aliasinggco
komplexer ist.Suchen Sie zunächst den ursprünglichen Abschlussbefehl. Beispiel:
Fügen Sie diese nun Ihrem Startskript hinzu (z. B. ~ / .bashrc):
Die
_completion_loader
Leitung ist möglicherweise nicht erforderlich. In einigen Situationen wird die Abschlussfunktion jedoch erst dynamisch geladen, nachdem Sie den Befehl eingegeben undTAB
das erste Mal gedrückt haben. Wenn Sie also den ursprünglichen Befehl nicht verwendet haben und den Alias + ausprobierenTAB
, wird möglicherweise eine Fehlermeldung wie "bash: finish: function '_docker' not found" angezeigt.quelle
Es gibt viele Antworten auf diese Frage und wie ich wette ich viele verwirrte Leser. Für meinen Fall hatte ich auch die Anforderung, dass meine Punktedateien auf mehreren Plattformen mit verschiedenen Versionen von Git funktionieren. Ich habe es auch nicht
alias g=git
aber stattdesseng
als Funktion definiert.Um dies zu erreichen, musste ich hier verschiedene Antworten zu einer Lösung zusammenfassen. Obwohl dies die Antworten bereits wiederholt, dachte ich, dass jemand in meinem Boot diese Zusammenstellung nützlich finden könnte, wie ich es getan hätte, als ich zum ersten Mal zu dieser Frage kam.
Dies setzt ältere und neuere Git-Vervollständigungen, Ubuntu-Standardeinstellungen und
brew install git
MacOS voraus . Im späteren Fall wurden die installierten Fertigstellungen des Gebräus nicht durch Bash verarbeitet (was ich später diagnostizieren werde).quelle
Wenn Sie verwenden
alias g='git'
, füge ich diese Codezeile hinzu.bash_aliases
quelle