Strg + L im Terminal

41

Ich habe versehentlich ctrl+ Lin das Terminal eingegeben und mein Terminalfenster hat eine Bildschirmgröße übersprungen. Ich habe mir die Tastaturkürzel unter "Bearbeiten" -> "Tastaturkürzel" angesehen und sie nicht gefunden.

Was macht ctrl+ Lund wo ist es definiert?

Parto
quelle

Antworten:

58

ctrl+ LLöschen Sie einfach den Terminalbildschirm.

Dies ist die Tastenkombination, die dem Befehl entspricht clear -x. ref

Es ist Eigentum von bash, also haben Sie es nicht unter Tastaturkürzeln in Ihrem Gnome-Terminal gefunden. Von man bash:

clear-screen (C-l)
          Clear the screen leaving the current line  at  the  top  of  the
          screen.   With  an  argument,  refresh  the current line without
          clearing the screen.

Zeigen Sie eine detaillierte Liste der Bash-Tastaturkürzel an .

souravc
quelle
Oh, das erklärt es.
Parto
3
Es ist jedoch nicht nur ein heftiger Schlag. Strg-L ist das Form-Feed-Zeichen. Es ist nicht so üblich, aber manchmal sehen Sie ^ L im Quellcode, der "Seiten" des Codes trennt. Es war sinnvoller, wenn ein Drucker es als Steuerzeichen interpretierte.
Joshua Taylor
@ JoshuaTaylor Sie sind richtig. Verwandte Wiki - Artikel über Seitenumbruch
souravc
1
^ L ist das Form-Feed-Zeichen in der ASCII-Tabelle, aber das macht nichts, es sei denn, es wird von einem Programm empfangen, das es entsprechend behandelt (in diesem Kontext entweder bash oder der Terminal-Emulator).
Alexis
1
Beachten Sie, dass es nicht das Äquivalent der Standardbefehl ist clear, weil es nicht Ihre Terminal Geschichte nicht löscht, während der Befehl der clearFall ist, wenn Sie das Add - -xArgument, etwa so: clear -x.
Jirislav
18

Wenn die von Ihnen verwendete Shell sie nicht abfängt, geben Sie ein "Form-Feed" -Zeichen in Ihr Terminal ein. Wenn die Terminalanwendung den Tastenanschlag nicht abfängt oder auf irgendeine Weise verwendet, wird Ctrl+ Letter in den ASCII-Code des Buchstabens minus 64 (1) übersetzt. 65 ist der ASCII-Code von 'A', 'L' ist der 12. Buchstabe -> Code 76. Wenn die Shell nicht weiß, was mit dem Code zu tun ist, gibt sie ihn aus.

Das Drucken eines FF-Zeichens führte zu einer neuen Seite auf einem Zeilendrucker und einem klaren Bildschirm auf dem Terminal (ja, ich habe damals einen VT-52 mit 300 Baud verwendet).

Also ist Ctrl+ L12, was FF ist. Ebenso ist Ctrl+ Iein TAB und Ctrl+ Gklingelt ---, wenn das Terminal oder die Shell es nicht abfängt, wie zum Beispiel Ctrl+ C.

Bemerkung aus der anderen Antwort: Es scheint, dass bash do intercept CTRL- Lund do a clear. Schön, dass die bashAutoren die Taste mit einem Befehl assoziiert haben, der mehr oder weniger genau so funktioniert wie der ASCII-Code auf alten Terminals!

Andererseits funktioniert bei mir zshdie Kombination CTRL- Ials TABund CTRL- Hals Backspace(2).

Altes nettes ASCII ... (Beachten Sie, dass der Buchstabe L in Spalte 4, Zeile 12 steht und den ASCII-Code 4 * 16 + 12 = 76 hat.)

Bild aus Wikimedia Commons

Originalbild hier , aus Wikipedia-Artikel über ASCII .


Fußnoten:

(1) Ctrlwirklich verwendet, um das Bit 7 zu löschen.

(2) Dies ist die Quelle für den Witz "Wort nicht entfernen", den Sie manchmal finden, zum Beispiel "das war eine schlechte ^ H ^ H ^ Hnicht so schöne Idee" ... (mit normalerweise einem Wort, das stärker als schlecht ist!)

Rmano
quelle
1
Nett. Wie verwende ich diese Tabelle übrigens? Ich kann sehen, dass der Buchstabe L in Zeile 12 und Spalte 4 steht. Muss ich dann nur noch minus 32 aus der 124 oder wie berechnet man den ASCII-Code?
Parto
@AvatarParto ups, schrieb 32 statt 65. Antwort korrigiert. Die Tabelle ist binär, der Code ist also Spalte * 16 + Zeile.
Rmano
1
Das Einfügen von Literalen ^Hs oder ^Ws ist hilfreich, wenn Sie keine durchgestrichenen Zeichen verwenden können. :)
Blacklight Shining
8

Control-Lwird von bash abgefangen und interpretiert (tatsächlich von der readlineBibliothek , die die interaktive Bearbeitung in der Befehlszeile übernimmt). Es ist an die clear-screenFunktion gebunden , wie @souravc schrieb.

Hinweis zur Bedeutung von Control-L: Es ist in der ASCII-Zeichentabelle als Form Feed definiert, dies bedeutet jedoch nichts, es sei denn, ein Programm interpretiert es entsprechend. Das Terminal löscht den Bildschirm nicht, wenn ein Formular-Feed angezeigt wird, da Sie dies überprüfen können, indem Sie ein ^ L in einer Datei speichern und die Datei mit drucken cat. Wenn bash/readlinedas ^Langezeigt wird, führt es die clear-screenFunktion aus. Dadurch wird eine Zeichenfolge gesendet, die von Ihrem Terminalemulator (wie durch termcap oder terminfo beschrieben) verstanden wird, und der Bildschirm wird gelöscht.

Bei sehr alten Druckern ^Lwürde a den Druckvorgang auf dem nächsten Blatt beschleunigen, daher der Name "Seitenvorschub". Moderne Terminals und Terminalemulatoren folgen jedoch einem neueren ANSI-Standard, bei dem Steuerbefehle aus mehrstelligen "Escape-Codes" bestehen , die mit ^[(Escape) beginnen. Wenn bash Ihre sieht ^L, sendet es wahrscheinlich die Sequenz mit zwei Befehlen ESC [ H ESC [ J, die sich oben links auf dem Bildschirm befindet und alles darunter löscht (daher den gesamten Bildschirm).

alexis
quelle
Tatsächlich ESC [ ESC [ Jlöscht die Sequenz auch den Befehlsverlauf, während die CTRL + L Sequenz dies nicht tut. Die Sequenz an das Endgerät gesendet ist eher ESC [ H ESC [ 2 J, gehen Sie voran es ein Versuch , sich mit diesem Befehl: printf "\033[H\033[2J".
Jirislav
0

Wie alle bereits ziemlich gut erklärt haben, was Ctrl+ List und tut, aber niemand hat erklärt, wie man den Befehl "umkehrt". Hier ein paar Befehle, die Sie eingeben können, um zu dem zurückzukehren, was Sie getan haben:

history

gibt Ihnen die letzten 20 Befehle, die Sie eingegeben haben.

tail --lines=20 /var/log/dpkg.log

gibt Ihnen die letzten 20 Zeilen der Ausgabe einer Paketinstallation, die Sie ausgeführt haben

Fabby
quelle