Windows-Shell Escape-Taste (ganze Zeile löschen) entspricht in Bash

13

Wenn Sie in der Windows-Befehlszeile (Powershell und Cmd) Escin einer Zeile die Taste drücken , wird alles, was Sie an der Eingabeaufforderung eingegeben haben, entfernt.

Ich habe festgestellt, dass das Drücken der EscTaste an der Bash-Eingabeaufforderung nichts bewirkt. Drücken Sie Escund backspacelöscht dann ein Wort, dies muss jedoch für jedes Wort durchgeführt werden.

Ich lerne Bash inkrementell und tippe manchmal etwas Dummes in die Mitte der Zeile und habe das Gefühl, dass es besser ist, wieder von vorne zu schreiben. Drücken backspaceist der einzige Weg, den ich bis jetzt gefunden habe.

Wie geht's?

Ich kenne den clearBefehl und die Ctrl-LVerknüpfung, aber ich spreche nicht über das Löschen des gesamten Terminals. Nur die Linie.

Animesh
quelle
1
Vor einiger Zeit habe ich eine Liste nützlicher Readline-Tastaturkürzel für den Superuser veröffentlicht. Sie können sie auch nützlich finden. (Readline ist die Bibliothek, die bash für die Zeilenbearbeitung verwendet.)
jw013
hey jw013, danke für eine nette bearbeitung. :-)
Animesh

Antworten:

15

Sie möchten kill-whole-line, aber dies ist nicht standardmäßig in Bash gebunden. backward-kill-line( CtrlX Backspace) und unix-line-discard( CtrlU) werden vom aktuellen Punkt bis zum Zeilenanfang gelöscht. Gehen Sie also zum Zeilenende und verwenden Sie eine der beiden Optionen.

Ignacio Vazquez-Abrams
quelle
Sie haben Recht, es ist an nichts gebunden. Ich habe das gerade mit herausgefunden bind -P. Ich denke Ctrl-Uund dann Ctrl-Yist die einzige Option dann.
Animesh
Sie werden feststellen, dass einige der Standardbindungen von den Schlüsselsequenzen im Emacs-Editor abgeleitet sind und dass diese Bindungen auch an anderer Stelle angezeigt werden.
Blrfl
@Blrfl Um Ihren Kommentar zu erweitern, wurden die meisten dieser Tastenkombinationen in die readline- Bibliothek abstrahiert , die von einer großen Anzahl von Kommandozeilenprogrammen verwendet wird. Aus diesem Grund verfügen alle über ähnliche Tasten zum Bearbeiten von Zeilen.
jw013
6

Ctrl+aCtrl+kspringt zum Zeilenanfang und löscht bis zum Zeilenende

lemen
quelle
Versuchen Sie ^Uzunächst, in den meisten Implementierungen des Emacs-Befehlszeilenbearbeitungsmodus die gesamte Zeile zu löschen. In den Fällen, in denen der Cursor nur von links gelöscht wird (z. B. GNU Readline), drücken Sie ^Kanschließend.
Mirabilos
3

Um die Antwort von Ignacio Vazquez-Abrams ein wenig zu erweitern, können Sie (fast) Windows-ähnliches Verhalten aus der EscTaste in Bash abrufen, indem Sie das kill-whole-lineto Escmit dem folgenden Befehl binden

bind '"\e":kill-whole-line'

Wenn Sie die Zeile zu Ihrer ~/.inputrcDatei hinzufügen , bleibt die Bindung zwischen den Sitzungen bestehen.

Beachten Sie jedoch, dass dies sehr ungewöhnlich ist, da bash den EscSchlüssel tatsächlich als einen anderen modifizierenden Schlüssel verwendet (wie eine nicht dauerhafte Alt- oder Strg-Taste). Wenn Sie sich die Liste der vorhandenen Tastenkombinationen ansehen (mit bind -P), werden Sie wahrscheinlich mehrere Befehle sehen, die an Tastenkombinationen gebunden sind, die mit "\ e" beginnen (z. B.

"\eb": backward-word

Hiermit wird die Kombination Esc+ so eingestellt B, dass der Cursor zum letzten Wortanfang zurückbewegt wird - ähnlich wie bei Ctrl+ , mit der Ausnahme, dass Sie immer wieder loslassen müssen Esc(und Bnatürlich auch, wenn Sie dies mehr als einmal hintereinander tun möchten) ).

Und das erklärt, warum ich gesagt habe, dass das Verhalten fast Windows-ähnlich ist: Wenn Sie drücken Esc, prüft die Bash, ob Sie es in Kombination mit einer anderen Taste verwenden. Wenn Sie es also binden kill-whole-line, gibt es eine gewisse Verzögerung zwischen dem Drücken (oder vielmehr dem Loslassen) Escund der Bash-Aktion, mit der Sie die Leitung für Sie freischalten.

Wenn Ihnen dies jedoch egal ist und Sie lieber mit der Verzögerung leben möchten, als sich auf einen anderen Tastendruck einzulassen, können Sie dies tun.

(Hinweis: Ein Großteil der Informationen hier wurde durch das Lesen und Folgen der Links in dieser Antwort erhalten .)

Wilson F
quelle
1
Dies war sehr hilfreich, danke und funktioniert mehr oder weniger wie angekündigt. Ich habe jedoch festgestellt, dass es zu ärgerlichem Verhalten führt, wenn andere Befehle "ungültig" ausgeführt werden, z. B. wenn am Ende einer Zeile die Taste ENTF gedrückt wird: Dadurch wird die Zeile gelöscht und durch [19;einen ähnlich aussehenden Escape-Code ersetzt. Am Ende fand ich die Zuordnung "\e\e"zu kill-whole-line(dh zweimal auf Esc tippen, um die Zeile zu löschen) einen netten Kompromiss.
j_random_hacker
@j_random_hacker: Hm, das gefällt mir. Ich habe Escsowieso oft ein paar Mal geschlagen, also könnte ich das versuchen. Ich habe es derzeit an Ctrl+ gebunden, kann Delmich aber nie daran erinnern.
Wilson F