Bash: 4-mal Escape drücken


11

Wenn ich in einem Bash-Terminal viermal die Escape-Taste drücke, wird Folgendes angezeigt:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

Was ist diese Funktion und wie werden diese Einträge gefunden? (Bei der zweiten Esc-Taste gibt das Terminal einen akustischen Alarm aus.)

Antworten:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

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+i jedoch 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:

Deutsche VT220 Tastatur


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

Die werden in sortierter Reihenfolge dargestellt


1
Interessant - das entspricht also zweimaligem Drücken der Tabulatortaste. Vielleicht 2 Escapes = 1 Tab?
flow2k
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.