Ich habe eine Reihe von Bash-Completion-Skripten eingerichtet (meistens mit Bash-It und einigen manuell erstellten Skripten).
Ich habe auch eine Reihe von Alias-Einstellungen für allgemeine Aufgaben wie gco
für git checkout
. Im Moment kann ich tippen git checkout d
Tabund develop
ist für mich fertig, aber wenn ich tippe, ist gco d
Tabes nicht fertig.
Ich gehe davon aus, dass dies daran liegt, dass das Abschlussskript abgeschlossen ist git
und nicht angezeigt wird gco
.
Gibt es eine Möglichkeit, alle meine Abschlussskripte generisch / programmatisch für die Arbeit mit meinen Aliasen zu verwenden? Wenn Sie den Alias nicht verwenden, können Sie den Zweck des Alias aufheben.
bash
tab-completion
dstarh
quelle
quelle
bash --version
, um dies zu bekommen (nicht verwenden-v
, andere Ausgabe).ll --[TAB]
, wird eine Liste mit Optionen für gedrucktls
? Ich bin ziemlich skeptisch, aber wenn Sie sicher sind, dass es so etwas in 11.10 gab, wäre ich neugierig, es zu durchforsten und herauszufinden, was entfernt wurde.Antworten:
Der folgende Code, der aus dieser Stack Overflow-Antwort und diesem Diskussionsthread der Ubuntu-Foren angepasst wurde, fügt Vervollständigungen für alle von Ihnen definierten Aliase hinzu:
Bei einfachen Aliasnamen (nur Befehl, keine Argumente) wird dem Alias die ursprüngliche Vervollständigungsfunktion zugewiesen. Für Aliase mit Argumenten wird eine Wrapper-Funktion erstellt, die die zusätzlichen Argumente in die ursprüngliche Vervollständigungsfunktion einfügt.
Im Gegensatz zu den Skripten, aus denen es entwickelt wurde, werden in der Funktion Anführungszeichen sowohl für den Alias-Befehl als auch für seine Argumente berücksichtigt (ersteres muss jedoch mit dem Vervollständigungsbefehl übereinstimmen und kann nicht verschachtelt werden). Außerdem sollten Aliase zuverlässig in Befehlslisten und herausgefiltert werden Pipes (die übersprungen werden, da es unmöglich ist, herauszufinden, was in ihnen zu vervollständigen ist, ohne die gesamte Shell-Befehlszeilen-Parsing-Logik neu zu erstellen).
Verwendungszweck
Speichern Sie den Code entweder als Shell-Skriptdatei und geben Sie den Quellcode ein, oder kopieren Sie die Funktion wholesale in
.bashrc
(oder Ihre zugehörige Punktdatei ). Das Wichtigste ist, die Funktion aufzurufen, nachdem sowohl die Bash-Vervollständigung als auch die Alias-Definitionen eingerichtet wurden (der obige Code ruft die Funktion direkt nach ihrer Definition auf, und zwar im Sinne von „Quelle und Vergessen“) steht dir besser). Wenn Sie die Funktion nach dem Beenden nicht in Ihrer Umgebung verwenden möchten, können Sie sieunset -f alias_completion
nach dem Aufrufen hinzufügen .Anmerkungen
Wenn Sie
bash
4.1 oder höher verwenden und dynamisch geladene Vervollständigungen verwenden, versucht das Skript, Vervollständigungen für alle Ihre Aliasbefehle zu laden, damit die Wrapperfunktionen für Ihre Aliase erstellt werden können.quelle
~/.bashrc
. Speichern Sie es entweder als Shell-Skriptdatei und geben Sie es als Quelle (. /path/to/alias_completion.sh
) ein, oder kopieren Sie den Code und fügen Sie ihn im Großhandel ein./usr/share/bash-completion/completions/
sie nur das erste Mal geladen werden, wenn der Benutzer tatsächlich trifft[TAB]
. Selbst wenn die Funktion von dort geladen~/.bashrc
wird, werden keine Vervollständigungen für Aliase zu Befehlen darin generiert. Nachdem sichergestellt wurdecomplete -p
, dass für das Terminal gearbeitet wirdapt-get
undapt-cache
ich Ihre Funktion kopiert habe, funktioniert sie ordnungsgemäß./tmp
nach kopiert~/.bash_completion
und am Anfang die entsprechendensource /usr/share/bash-completion/completions/
Einträge manuell hinzugefügt (separat fürapt-get
undapt-cache
-apt-{cache,get}
funktioniert nicht).Ja, hier ist das vollständige Alias- Projekt, das Ihr Problem genau löst. Es bietet allgemeine und programmatische Vervollständigung von Aliasen ohne Verwendung von
eval
.quelle
Dies ist der manuelle Weg für diejenigen, die dies suchen.
Rufen Sie zunächst den ursprünglichen Abschlussbefehl auf. Beispiel:
Fügen Sie diese nun Ihrem Startskript hinzu (zB ~ / .bashrc):
Quelle: https://superuser.com/a/1004334
quelle