Dies zeigt, dass die Standardtastenbindung von Meta+Esc(und Ctrl+i) im Emacs-Befehlszeilenbearbeitungsmodus die Readline-Funktion ist complete. Die MetaTaste befindet sich normalerweise Escauf Tastaturen ohne explizite MetaTaste. In der Readline-Dokumentation für diese Funktion heißt es
Versuchen Sie, den Text vor dem Punkt zu vervollständigen. Die tatsächlich durchgeführte Fertigstellung ist anwendungsspezifisch. Bash versucht beispielsweise, den Text nacheinander als Variable (wenn der Text beginnt $), Benutzername (wenn der Text mit
~), Hostname (wenn der Text mit beginnt @) oder Befehl (einschließlich Aliase und Funktionen) zu behandeln. Wenn keines davon eine Übereinstimmung ergibt, wird versucht, den Dateinamen zu vervollständigen. Gdb hingegen ermöglicht die Vervollständigung von Programmfunktionen und -variablen und versucht nur unter bestimmten Umständen die Vervollständigung des Dateinamens.
In Bezug auf Ihren Kommentar zu Anthons Antwort : Nein, Esczweimaliges Drücken ist nicht dasselbe wie Taballgemeines Drücken (es sei denn, es befindet sich in einem Programm, das beide derselben Aktion zuordnet, wie dies Readline standardmäßig tut). Ist Ctrl+ijedoch das gleiche wie Tab, genau wie Ctrl+[ist das gleiche wie Esc. Dies bedeutet, dass Sie die Fertigstellung mit Ctrl+[Ctrl+[in durchführen könnenbashEsc abschließen completekönnen, wenn Sie möchten, solange double an die Readline- Funktion gebunden ist . Dies ist praktisch, wenn Sie beispielsweise an einem VT220-Terminal arbeiten, dem die Escape-Taste fehlt:
Kusalananda, vielen Dank für diese ausführliche Antwort. Zu Ihrem letzten Punkt: Warum ist Esczweimaliges Drücken (oder \M-\e) nicht dasselbe wie Tabin Bash, wenn beide abgeschlossen sind?
flow2k
1
@ flow2k Es ist dasselbe, wenn sowohl Esc-Esc als auch Tab an die completeFunktion gebunden sind , die sie standardmäßig sind, aber nicht allgemein (dh die Tastendrücke sind nicht "gleich"). Sie können Tab nicht überall durch Esc-Esc ersetzen, nur in readline-fähigen Programmen. Sie können Tab jedoch überall durch Strg-i oder Esc durch Strg- [ersetzen.
Kusalananda
Ein Follow-up, wenn ich darf: Ich sehe nicht Tabin der Ausgabe von bind -p. Warum das? Vielleicht, weil Tabes "fest codiert" ist und nicht gebunden werden kann?
flow2k
1
@ flow2k Nein, Tab ist identisch mit Strg-i. Suchen Sie nach \C-i. Dies ist eine Äquivalenz auf Hardwareebene.
Kusalananda
8
Dies wird als Dateivervollständigung bezeichnet. Wenn Sie keinen vorherigen Befehl in der Befehlszeile haben, bietet Ihnen bash die Möglichkeit, alle ihm bekannten 2837-Befehle auszuführen, sowohl die integrierten als auch die in Ihrer PATH
Esc
zweimaliges Drücken (oder\M-\e
) nicht dasselbe wieTab
in Bash, wenn beide abgeschlossen sind?complete
Funktion gebunden sind , die sie standardmäßig sind, aber nicht allgemein (dh die Tastendrücke sind nicht "gleich"). Sie können Tab nicht überall durch Esc-Esc ersetzen, nur in readline-fähigen Programmen. Sie können Tab jedoch überall durch Strg-i oder Esc durch Strg- [ersetzen.Tab
in der Ausgabe vonbind -p
. Warum das? Vielleicht, weilTab
es "fest codiert" ist und nicht gebunden werden kann?\C-i
. Dies ist eine Äquivalenz auf Hardwareebene.Dies wird als Dateivervollständigung bezeichnet. Wenn Sie keinen vorherigen Befehl in der Befehlszeile haben, bietet Ihnen bash die Möglichkeit, alle ihm bekannten 2837-Befehle auszuführen, sowohl die integrierten als auch die in Ihrer
PATH
Die werden in sortierter Reihenfolge dargestellt
quelle