Korzystając z Terminal.app, możesz wyczyścić ekran, używając wbudowanej powłoki clear
lub naciskając ^+ L(Control-L).
Wszystko to jednak powoduje przesunięcie bieżącej zawartości ekranu o jedną wysokość do tyłu i zresetowanie kursora / wejścia w pierwszym wierszu. Oznacza to, że nadal możesz przewinąć do tyłu i go zobaczyć.
Możesz także zresetować całe przewijanie do tyłu, naciskając ⌘+ K(Command-K).
Po wykonaniu tej czynności nie można w ogóle przewinąć do tyłu.
W niektórych sytuacjach (zwłaszcza przed uruchomieniem screen
lub vim
) chciałbym zresetować przewijanie do tyłu przed wykonaniem polecenia.
Czy clear
w systemie OS X istnieje polecenie (takie jak ), które pozwala mi to zrobić? Biorąc pod uwagę istnienie pbcopy
i pbpaste
, myślę, że może istnieć coś podobnego, co pozwoli mi to zrobić.
źródło
clear && printf '\e[3J'
(Wybrałeś złą odpowiedź jako poprawną!)Odpowiedzi:
Terminal obsługuje rozszerzenie sekwencji ucieczki ED (Erase in Display), aby usunąć przewijanie do tyłu. Obsługiwany jest również przez xterm. Polecenie ED, opisane w instrukcji VT100 , przyjmuje następujące wartości parametru Ps:
Terminal ( i xterm ) dodaje:
Pamiętaj, że powoduje to jedynie przewinięcie do tyłu, a nie ekran. Umożliwia to usunięcie jednego lub drugiego lub obu poprzez wysłanie dwóch sekwencji ucieczki.
Na przykład możesz wyczyścić ekran i przewinąć do tyłu za pomocą następującego polecenia powłoki:
clear && printf '\e[3J'
(
clear
Polecenie wyszukuje odpowiednią sekwencję do wyczyszczenia ekranu dla bieżącego terminala, ale sekwencja ucieczki „kasowanie przewijania wstecz” jest niestandardowa i musi być zakodowana na stałe. Jeśli umieścisz ją w skrypcie powłoki, którego nie znasz na pewno będzie zawsze tylko uruchomić z terminalu, należy sprawdzić, czy$TERM_PROGRAM
jestApple_Terminal
przed wysłaniem go.)źródło
alias clear="clear && printf '\e[3J'"
echo $'#!/usr/bin/env bash\n/usr/bin/clear\nprintf \'\\e[3J\'' >clr; chmod +x clr
⌘K, skrót do „View> Clear scrollback”.
AKTUALIZACJA : Można to zautomatyzować za pomocą AppleScript, wykonując następujące polecenie:
… Które możesz oczywiście
alias
zrobić w dowolnym miejscu lub zapisać w funkcji w~/.profile
skrypcie logowania :)Jednak ze względów bezpieczeństwa, aby móc używać tego nawet w tle, nie ryzykując naciśnięcia klawisza niewłaściwej aplikacji frontowej, radzę otoczyć go następującym testem:
… Co daje nam następujący kod:
… Który z kolei, odpowiednio uciekł i
alias
wydał, kończy się na:A oto twój nowy
clear
! :)źródło
vim
) powłoka wykonała „resetowanie przewijania” przed uruchomieniem vima. Programowy, nie interaktywny.clear
; to znaczy, czyści ekran, ale wciąż mogę przewijać do tyłu. UderzenieCommand
K
działa normalnie.Oto kod, który działa zarówno dla terminala macOS, jak i iTerm2. Okno nie musi również znajdować się na pierwszym planie.
Jak to działa
Jest to kompozycja 3 sekwencji ucieczkowych ANSI , szczególnie poleceń „Control Sequence Introducer” .
\033
jest sekwencją specjalną, która koduje punkt kodowy znaku, który reprezentuje. Na początku0
wskazuje, że reszta sekwencji koduje wartość ósemkową, w tym przypadku33
ósemkową. Wartość dziesiętna to27
(3 * 8^1 + 3 * 8^0
=3 * 8 + 3
=24 + 3
=27
). W ASCII punktem kodowym27
jest znak „ESC” (escape).CSI
polecenia zaczynają się odESC [
, aka\033[
. Wiedząc o tym, możemy podzielić sznurek na 3 części.CSI 2 J
CSI n J
n
ustawiana jest wartość2
, która wywołuje drugi wariant: „Jeśli n wynosi 2, wyczyść cały ekran (i przesuń kursor do lewego górnego rogu na DOS ANSI.SYS)”.CSI 3 J
:CSI n J
n
ustawiana jest wartość3
, która wywołuje trzeci wariant: „Jeśli n wynosi 3, wyczyść cały ekran i usuń wszystkie wiersze zapisane w buforze przewijania (ta funkcja została dodana dla xterm i jest obsługiwana przez inne aplikacje terminalowe)”.CSI 1 ; 1 H
:CSI n ; m H
n
im
są ustawione na1
, co oznacza, że to polecenie przesuwa kursor do lewego górnego rogu.źródło
CSI n J
” (gdzie n = 2) + ”CSI n J
„ (gdzie n = 3) + ”CSI n ; m H
” (gdzie n, m = 1, 1), co przekłada się na: „ED - Usuń z wyświetlacza” (wariant 2), „ED - Erase in Display” (wariant 3), „CUP - Cursor Position” (przejście do 1, 1)