Ich habe einen Alias, ee, der für meinen Lieblingseditor mg definiert ist. Wenn ich so etwas mache
mg fo
und dann auf Tab drücken, wenn eine Datei foo existiert, bekomme ich Tab-Vervollständigung zu:
mg foo
Auf den meisten Systemen, die ich verwende (z. B. alle Versionen von Ubuntu seit vielen Jahren und einige Installationen von Debian),
ee fo
auch komplett zu vervollständigen
ee foo
Auf einem von mir verwendeten System mit Debian 6.0 und GNU Bash 4.1.5 (1) -Veröffentlichung schlägt die Tab-Vervollständigung für die Version mit dem Alias fehl. Beachten Sie, dass dies kein Problem beim Vervollständigen des Alias selbst ist - es ist ein Problem beim Vervollständigen der Argumente des Alias-Befehls. Gibt es eine Möglichkeit, dieses Verhalten auf dem Debian-System zu beheben? Upgrade auf Bash 4.2.x? Mit Konfigurationsdateien herumspielen?
quelle
/etc/bash_completion
?Antworten:
Bearbeiten: OK. Scheint, als hätte ich die Situation falsch verstanden. Dachten Sie meinten Programmoptionen wie in:
Aber ich denke, es ist die Vervollständigung der Datei. Ich weiß es nicht, aber probieren Sie es aus.
Als schnelle Lösung sollte dies funktionieren:
Geben:
ab programmierbaren Vervollständigungs-Builtins . ZB
-X pattern
kann das nützlich sein. ZB ausschließen.swp
und.swo
Dateien:nur zeigen
.zip
,.ZIP
:Bei einigen müssen Sie möglicherweise eine
shopt -s extglob
Konfigurationsdatei hinzufügen .ALTE Antwort:
Sie könnten so etwas in Ihrem ausprobieren
.bash_completion
.Zumindest als Vorspeise.
Die Kernidee besteht darin,
complete
den Alias einfach mit dem vorhandenen vollständigen Skript für das reale Programm hinzuzufügen . Hier gehe ich davon aus, dass sie alle im Format sind:Sie können das bekommen, was es ist, indem Sie Folgendes ausführen :
complete -p program_name
. Am besten zuerst überprüfen.Für einige Methoden wie
apt-get
kann man nur Alias + Laden verwenden:Für andere wie
mplayer
einen braucht man einen Funktions-Wrapper, wie zB:Es ist durchaus möglich, dass es einen besseren Weg gibt, dies zu lösen, aber für meinen Gebrauch hat es gut funktioniert. Ich verwende es hauptsächlich für Wrapper-Skripte, bei denen ich die Funktionalität des ursprünglichen Programms erweitere. Habe es nicht für Aliase verwendet.
Ich fühle mich bei diesem Hack nicht sicher, aber Sie könnten sehen, ob es funktioniert.
Einige Programme verwenden eine allgemeinere Vervollständigung
_longopt
, bei der die Quelldatei nicht gefunden wird. Normalerweise ist es auch nicht erforderlich, eine Quelle zu finden, daher könnte eine einfachere Variante sein:Ein Problem hierbei, IIRC, ist, dass einige Abschlussskripte erst bei der ersten Ausführung geladen werden, wie in :
prog
tabtab. Alternativ können Sie es auch hinzufügen,else
wenn die Beschaffung von Dateien fehlschlägt.quelle
complete -p mg
gibt kein Ergebnis. Und doch bekomme ich die Tab-Vervollständigung, wenn ich das echte Programm benutze ...?complete -f -o default ee
ist eine Lösung. +1, Antwort akzeptiert. Weitere Tests zeigen auch, dass das ursprüngliche Problem nur auftrat, wenn mehrere mögliche Abschlüsse ziemlich lang waren. Unter diesen Bedingungen war mg vollständig, ee jedoch nicht. Danachcomplete -f -o default ee
arbeitet ee bei langen Abschlüssen genauso wie mg.Ihr Problem ist: Bash-Vervollständigung versteht keine Aliase. Wenn Sie also einen Alias schreiben, wird dieser einfach als unbekannter Befehl angesehen und nicht automatisch vervollständigt. Sie können entweder auf die Standardvervollständigung des Dateinamens zurückgreifen, wenn Sie dies wünschen. Sie können auch ein Programm installieren , das Aliase vor der automatischen Vervollständigung erweitert und Ihre Aliase als Alias-Befehle vervollständigt.
quelle