Wenn Sie Terminal.app verwenden, können Sie den Bildschirm mithilfe der integrierten Shell clear
oder durch Drücken von ^+ L( Strg -L) löschen .
Dies reicht jedoch aus, um den aktuellen Bildschirminhalt um eine Bildschirmhöhe nach hinten zu schieben und den Cursor / die Eingabe in der ersten Zeile zurückzusetzen. Das heißt, Sie können immer noch zurückblättern und es sehen.
Sie können auch den gesamten Bildlauf zurücksetzen, indem Sie ⌘+ K(Befehlstaste-K) drücken .
Danach können Sie überhaupt nicht mehr zurückblättern.
In bestimmten Situationen (insbesondere vor dem Ausführen von screen
oder vim
) möchte ich den Bildlauf zurücksetzen, bevor der Befehl tatsächlich ausgeführt wird.
Gibt es einen Befehl (wie clear
), der in OS X implementiert ist und der es mir ermöglicht, dies zu tun? Angesichts der Existenz von pbcopy
und pbpaste
denke ich, dass etwas Ähnliches existieren könnte, das es mir ermöglicht, dies zu tun.
quelle
clear && printf '\e[3J'
(Sie haben die falsche Antwort als richtige Antwort ausgewählt!)Antworten:
Das Terminal unterstützt eine Erweiterung der Escape-Sequenz ED (Erase in Display), um das Zurückblättern zu löschen. Es wird auch von xterm unterstützt. Der im VT100-Handbuch beschriebene ED-Befehl akzeptiert die folgenden Werte für den Ps-Parameter:
Terminal ( und xterm ) fügt hinzu:
Beachten Sie, dass dadurch nur das Zurückblättern und nicht der Bildschirm gelöscht wird. Auf diese Weise können Sie den einen oder den anderen oder beide löschen, indem Sie zwei Escape-Sequenzen senden.
Beispielsweise können Sie den Bildschirm und den Bildlauf zurück mit dem folgenden Shell-Befehl löschen:
clear && printf '\e[3J'
(Mit dem
clear
Befehl wird die entsprechende Sequenz zum Löschen des Bildschirms für das aktuelle Terminal gesucht. Die Escape-Sequenz zum Löschen des Bildlaufs ist jedoch benutzerdefiniert und muss fest codiert werden. Wenn Sie dies in ein Shell-Skript einfügen, das Sie nicht kennen für bestimmte wird mit Terminal immer nur ausgeführt werden, sollten Sie überprüfen , dass$TERM_PROGRAM
istApple_Terminal
vor dem Senden.)quelle
alias clear="clear && printf '\e[3J'"
echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
⌘K, Verknüpfung zu „Ansicht> Bildlauf zurücksetzen“.
UPDATE : Dies kann mit AppleScript durch den folgenden Befehl automatisiert werden:
... die du natürlich
alias
nach Belieben hinzufügen oder in einer Funktion in deinem~/.profile
Login-Skript speichern kannst :)Um dies aus Sicherheitsgründen auch im Hintergrund nutzen zu können, ohne einen Tastendruck auf eine falsche Front-App zu riskieren, würde ich Folgendes empfehlen:
… Was uns folgenden Code gibt:
… Was wiederum, richtig geflüchtet und
alias
bearbeitet, endet in:Und hier ist dein neues
clear
! :)quelle
vim
) ausführe, die Shell den "Scrollback-Reset" ausführt, bevor vim ausgeführt wird. Programmatisch, nicht interaktiv.clear
. Das heißt, der Bildschirm wird gelöscht, aber ich kann immer noch zurückblättern. SchlagenCommand
K
funktioniert normal.Hier ist der Code, der sowohl für macOS 'Terminal als auch für iTerm2 funktioniert. Das Fenster muss auch nicht im Vordergrund stehen.
Wie es funktioniert
Dies ist eine Zusammenstellung von 3 ANSI-Escape-Sequenzen , insbesondere "Control Sequence Introducer" -Befehlen .
\033
ist eine Escape-Sequenz, die den Codepunkt für das von ihr dargestellte Zeichen fest codiert. Das Anführen0
zeigt an, dass der Rest der Sequenz einen Oktalwert codiert, in diesem Fall33
in Oktal. Der Dezimalwert davon ist27
(3 * 8^1 + 3 * 8^0
=3 * 8 + 3
=24 + 3
=27
). In ASCII ist der Codepunkt27
das "ESC" -Zeichen (Escape-Zeichen).CSI
Befehle beginnen mitESC [
, aka\033[
. Wenn wir das wissen, können wir die Saite in drei Teile aufteilen.CSI 2 J
CSI n J
n
Wert wird2
in diesem Fall auf gesetzt, wodurch die zweite Variante aufgerufen wird: "Wenn n 2 ist, wird der gesamte Bildschirm gelöscht (und der Cursor in DOS ANSI.SYS nach links oben bewegt)."CSI 3 J
:CSI n J
n
Wert wird3
in diesem Fall auf gesetzt, wodurch die dritte Variante aufgerufen wird: "Wenn n 3 ist, wird der gesamte Bildschirm gelöscht und alle im Bildlaufpuffer gespeicherten Zeilen werden gelöscht (diese Funktion wurde für xterm hinzugefügt und wird von anderen Terminalanwendungen unterstützt)."CSI 1 ; 1 H
:CSI n ; m H
n
undm
sind beide auf gesetzt1
, was bedeutet, dass dieser Befehl den Cursor in die linke obere Ecke bewegt.quelle
CSI n J
" (wo n = 2) + "CSI n J
" (wo n = 3) + "CSI n ; m H
" (wo n, m = 1, 1), was übersetzt bedeutet: "ED - Erase in Display" (Variante 2), "ED - Erase in Display" (Variante 3), "CUP - Cursor Position" (Verschieben auf 1, 1)