PuTTY: wyczyść przewijanie z linii poleceń

27

Kiedy łączę się z moim serwerem za pomocą PuTTY, mogę wyczyścić widoczny ekran za pomocą clearpolecenia.

Jednak nadal mogę przewijać wstecz w GUI PuTTY, aby zobaczyć stare rzeczy. Znam funkcję Clear Scrollback PuTTY , ale wymaga to kliknięcia myszą.

Chciałbym wykonać dokładnie tę samą operację „Wyczyść przewijanie”, ale z wiersza polecenia.

Czy to możliwe?

Czytam tę stronę , co wydaje się to wskazywać.

Jednak moje eksperymenty zakończyły się niepowodzeniem. Na przykład:

printf '\033[3J'

Nic dla mnie nie robi.

Być może nie rozumiem znaczenia CSI 3 Jtego drugiego linku, chociaż ...

jwd
źródło
Jakiej wersji PuTTY używasz? Strona wskazuje, że funkcja działa w PuTTY 0.59 i nowszych. Mam PuTTY 0.60 i działa dla mnie. Pamiętaj, że usuwa tylko bufor przewijania, nie usuwa ekranu. (Jeśli mam pasek przewijania, który mogę przewijać, a następnie użyć tej sekwencji, zauważam, że pasek przewijania został wyłączony, ponieważ nagle nie ma już nic do przewijania. Ale aktualnie wyświetlany ekran pozostaje na swoim miejscu.)
Bavi_H
@Bavi_H: ah, dziękuję - nie zdawałem sobie sprawy, że nie wpłynie to na aktualnie wyświetlany tekst. Widzę, że to też działa. Pełne rozwiązanie, którego chcę, to clear && printf '\033[3J'. Jeśli udzielisz odpowiedzi, zaakceptuję ją.
jwd

Odpowiedzi:

32

CSI 3 JSekwencja usunąć bufor przewijania dodano PuTTY 0,59. (Na stronie z życzeniami dotyczącymi tej funkcji zobacz wiersz „fixed-in” lub przejdź do strony zmian PuTTY i wyszukaj CSI 3 J).

Jak wspomniano w jwd, możesz wpisać printf '\033[3J'w wierszu poleceń, aby wysłać tę sekwencję do PuTTY. Pamiętaj, że powoduje to jedynie wyczyszczenie bufora przewijania, nie powoduje wyczyszczenia ekranu. Jeśli masz pasek przewijania, który możesz przewijać, a następnie użyj tej sekwencji, zobaczysz, że pasek przewijania został wyłączony, ponieważ nagle nie ma już możliwości przewijania. Ale aktualnie wyświetlany ekran pozostaje na swoim miejscu.

Jak wspomniano w jwd, możesz wyczyścić ekran i bufor przewijania za pomocą clear && printf '\033[3J'

Bavi_H
źródło
A dla tych, którzy szukają lekkiej lektury na temat kodów kontrolnych: xfree86.org/4.8.0/ctlseqs.html (: Ten jest podCSI P s J
jwd 10.10.17
11

Jeśli jesteś przyzwyczajony, tak jak ja, do korzystania Ctrl+Lz Reset terminalopcji dostępnej w menu systemowym PuTTY, pomocne może być włączenie tej opcji Configuration -> Window -> Behavior -> "System menu appears on ALT-Space".

Następnie, gdy trafisz Alt+Space, opcja dla "Clear scrollback"jest uruchamiana przez L(małe litery; bez Shift). W ten sposób reset + clearstaje się uroczo mnemoniczną kombinacją Ctrl+Li Alt+Space Lbez irytujących myszy lub bałaganu w historii muszli.

ConfexianMJS
źródło
Działa i jest łatwy do zapamiętania :)
Wyrmwood 21.04.17
Nieźle, chociaż FYI: możesz także zapobiec zaśmiecaniu historii powłoki, poprzedzając polecenie spacją.
jwd
6

Utwórz plik skryptu i umieść go w folderze zawierającym ścieżkę:

$cat > /usr/local/bin/cls
#!/bin/bash
clear
printf '\033[3J'

Naciśnij CTRL + d, aby zapisać i wyjść

Zmień uprawnienia do pliku:

chmod a+x /usr/local/bin/cls

Teraz możesz używać cmd cls :-)

MrCalvin
źródło
1

Rozwiązaniem było dla mnie przesłanie znaków „\ 033 \ 143”:

printf („\ 033 \ 143”);

Spowoduje to wyczyszczenie ekranu terminala i ponowne umieszczenie kursora w lewym górnym rogu.

eschick
źródło
1
(1) Pytanie wymaga podania wiersza polecenia (tj. Powłoki). To nie jest polecenie powłoki, to linia kodu C. jako taki nie jest odpowiedzią na to pytanie. (2) Ten post byłby nieco bardziej użyteczny, gdybyś powiedział, jaka \143jest postać i jak odnosi się do tego pytania, najlepiej z cytatami.
Scott
1
Dla tych, którzy zastanawiają się, odpowiada to kodowi ucieczki „pełnego resetu” ( ESC c). ASCII cma wartość 99ósemkową 143. Będzie to zrobić wiele innych rzeczy oprócz wyczyszczenia przewijania, po prostu FYI.
jwd 10.10.17
1

W pakiecie dostępna jest opcja, w której można odznaczyć domyślne zachowanie przewijania wstecz. Po prostu odznacz opcję „Wciśnij skasowany tekst do przewijania”.

Obraz ustawień szpachli

Po wydaniu polecenia wyczyść spowoduje to usunięcie ekranu i nie spowoduje ponownego przewinięcia zawartości poprzedniego ekranu.

użytkownik3133668
źródło