Jak naprawdę wyczyścić terminal?

384

Mogę wydać clearpolecenia lub naciśnij Ctrl+ L, aby usunąć bieżący terminalu Ubuntu, ale to po prostu przesuwa wcześniejsze górę wyjściowych i jeśli używać kółka myszy lub PgUPi PgDownklucze trudno odróżnić, gdzie zaczyna się wyjście z poprzednich końcach dowodzenia i wyjście z bieżącego polecenia.

Czy istnieje sposób, aby naprawdę wyczyścić terminal, aby nie wyświetlać wyników poprzednich poleceń?

Stann
źródło
11
Naciśnij dwa razy Ctrl + L, a otrzymasz puste!
Pandya

Odpowiedzi:

455

Tak, polecenie, którego szukasz, to

reset

W przeciwieństwie do clear, lub Ctrl+ L, resetfaktycznie całkowicie ponownie zainicjuje terminal , zamiast po prostu wyczyścić ekran. Nie spowoduje to jednak ponownego utworzenia powłoki (bash). Oznacza to, że stan bash jest taki sam jak poprzednio, tak jakbyś tylko czyścił ekran.

Jak wspomniano w komentarzach @Wallacoloo, to polecenie powinno zrobić to samo szybciej:

tput reset

Z pozostałych odpowiedzi:

  • Możesz ustawić skrót klawiaturowy do resetterminala, jak wyjaśniono przez towolf .

  • Jeśli korzystasz z Kubuntu , a twój terminal to Konsola, musisz przejść do Edycja → Wyczyść historię , ponieważ resetnie działa tam tak samo, jak zauważa UncleZeiv .

Stefano Palazzo
źródło
9
Prawdopodobnie nie ma znaczenia dla większości użytkowników, ale zachowanie resetzależy od terminala.
cthom06
2
Osobiście nie mam nic przeciwko temu, że coś jest „przewijane” wzdłuż rolki, kiedy uderzę ^L. Nie widzę tego (tego właśnie chcę!), Nie czuję tego, a jeśli nagle będę musiał przywrócić to, co tam było - nie ma problemu. resetw przeciwieństwie do tego jest znacznie trudniejszym narzędziem - użyję go, gdy coś pójdzie nie tak z terminalem - jak, gdy dziwne sekwencje ucieczki przypadkowo zepsuły wyświetlacz.
ulidtko
14
@ulidtko: ma to znaczenie, gdy uruchamiasz kolejne sesje programów z mnóstwem wyników. Jeśli przewiniesz do tyłu, łatwo pomylić, które wykonanie wydrukowało coś. Wiem doskonale, że w takich przypadkach można zastosować bardziej wyrafinowane rozwiązania, ale mimo to jest to scenariusz, który pojawia się dość często w szybkich i brudnych sesjach debugowania.
UncleZeiv,
7
Jest też to, tput resetco wyraźnie robi to samo, ale kończy się natychmiastowo (ale resetmoże to potrwać do około 2 sekund, zanim ponownie pojawi się monit).
Ponkadoodle,
1
Powoduje to zmianę rozmiaru okna putty.exe, byłoby miło wyczyścić bez tego.
void.pointer
99

Szukałem tego przez chwilę i znalazłem geniusz, który opublikował to:

clear && printf '\e[3J'

Czyści cały bufor ekranu, bardzo czysty. Działa na OS X i uważam, że działa dobrze na większości terminali * nix.

Dla ciekawskich ta część '\e[3J'to polecenie ucieczki terminalu.

Goran
źródło
2
Hmm, działa w Xterm, Konsole i Linux VT, ale nie działa w gnome-terminal ...
Ruslan
1
Dzięki, działa świetnie na moim Macu - naprawdę brakowało mi prawdziwego stylu Bash reset.
JohnnyCoder
9
Dzięki, to bardzo przydatne! Co printf '\e[3J'znaczy Jak czyści bufor?
Filip Spiridonov
4
bądź ostrożny aliasing reset- to nie tylko wyczyszczenie terminala. na przykład, jeśli przypadkowo wydrukujesz plik binarny z losowymi śmieciami, które psują terminal (np. wyłącza echo wpisywanych znaków), resetzwykle możesz to naprawić. oczywiście aliasing jest w porządku, o ile wiesz, jak wykonać \overridepolecenie z cieniem aliasu.
RubyT TuesdayDONO
4
Jest to jedyna odpowiedź, która działa, aby wyczyścić przewijanie Putty podczas uzyskiwania dostępu do niektórych SSH przez Winders.
dhaupin
45

Możesz także przypisać skrót w gnome-terminal, przechodząc do Edycja → Skróty klawiaturowe . Używam Shift+ Ctrl+ Alt+ C.

zresetuj i wyczyść skrót

towolf
źródło
+1. Zawsze mam ukryty pasek menu; więc nawet po latach używania gnome'a ​​nigdy nie myślałem o tym. Dzięki :-)
Stefano Palazzo
3
„Reset” nic dla mnie nie robi, a „Reset and Clear” usuwa wszystko, ale nie wyświetla ponownie monitu. Żadna z tych pozycji menu nie zachowuje się jak polecenie „reset” z terminala.
Hibou57
Jak powiedział @ Hibou57, mój skrót klawiaturowy „Reset” wydaje się nic nie robić. Czy ta funkcjonalność jest zepsuta w 14.04?
Michael Martin-Smucker
„Czy ta funkcja jest zepsuta w 14.04?”: To samo dotyczy 12.04.
Hibou57
1
@ Hibou57 „Resetuj i wyczyść” nie powinien ponownie wyświetlać monitu, ale jeśli naciśniesz Enter, powinien ponownie wyświetlić monit. Czy to Ci pasuje?
Don Hatch,
19

Cross wysyłając moją odpowiedź z stackoverflow .

Użyj następującego polecenia, aby zrobić czysty ekran zamiast po prostu dodawać nowe wiersze ...

printf "\033c"

tak, to jest „printf” w wierszu polecenia bash.

Prawdopodobnie będziesz chciał zdefiniować alias ...

alias cls='printf "\033c"'

Wyjaśnienie

\033 == \x1B == 27 == ESC

Staje się <ESC>cto kodem ucieczkowym VT100 do resetowania terminala. Oto kilka informacji o kodach ucieczki terminala.

Edytować

Oto kilka innych sposobów na zrobienie tego ...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

Powyższe nie działa na konsoli KDE (zwanej Konsolą), ale jest nadzieja! Użyj poniższej sekwencji poleceń, aby wyczyścić ekran i bufor przewijania wstecz ...

clear && echo -en "\e[3J"

A może użyj następującego aliasu w KDE ...

alias cls='clear && echo -en "\e[3J"'

Mam stąd polecenie przewijania do tyłu .

Samouk
źródło
18

uruchom to polecenie:

reset

Ma to taki sam efekt jak uruchomienie nowego terminala.

dv3500ea
źródło
6
Używając szpachli, po uruchomieniu resetnadal mogę przewijać w górę i zobaczyć poprzednie rzeczy. Czy to jest raczej problem z PuTTY reset?
Svish,
@svish - to tylko kwestia implementacji kitu lub decyzja.
belacqua
@jgbelacqua, Deal :)
Svish
Współpracował z terminalem MAC OS
Bira
2
@Bira Nie, resetnie usuwa czyszczenia przewijania w systemie macOS 10.14 Mojave. Możesz spróbować seq 100; resetzobaczyć przewijanie nadal tam. Na terminalu macOS Cmd+Kmożna wyczyścić ekran i przewijać.
Johnny Wong
8

Moim ulubionym jest printf "\ec". Może to być również printf "\033c"lub printf "\x1bc". Jest to sekwencja ucieczki ansi, która w cudowny sposób czyści ekran i bufor dla wyjścia terminala (wydaje się, że w przypadku większości standardowych terminali, w których pracowałem - wiem, że działa na przykład na gnome-terminal, terminator, xterm itp. Na Ubuntu) Linuxes)

Wiem, że to działa w Linux Mint i Ubuntu 14.04, więc nie wiem, dlaczego ludzie dodają i zapraszają takie rzeczy clear && echo -ne "\033c. printf "\ec"zawsze dla mnie pracował.

Dodatkowo w moim .bashrcmam takie powiązanie:

bind -x '"\C-t": printf "\ec"';

Teraz naciskam ctrltcały czas.

dylnmc
źródło
Czy wiesz, jak można utworzyć mapowanie za pomocą klawisza Windows? Ten fragment kodu jest naprawdę świetny, działa dokładnie tak jak Command-K na Macu. Dziękuję Ci.
Niloct
@ Niloct możesz sprawdzić, czy terminal obsługuje go xev(po prostu wpisz xevterminal w sesji X). Z tego, co mogłem powiedzieć, urxvt nie obsługuje tego; chociaż nie próbowałem w tty, jestem pewien, że nie będzie obsługiwany. Wątpię też, czy Xterm lub terminal gnome by to poparły. Jest to trudne w przypadku ansi-ucieczek. Pozdrawiam i przepraszam za spóźnioną odpowiedź.
dylnmc
W porządku @dylnmc, doceniam to. Dziękuję za komentarz.
Niloct
5

Cóż, to naprawdę zależy, jeśli Konsolena przykład używasz, nawet resetnie przeszkadza ci przewinąć za pierwszą linię. W takim przypadku musisz użyć funkcji konkretnego terminala, którego używasz. Bo Konsoleto jest Edit > Clear History.

UncleZeiv
źródło
3

Odkryłem, że sukces Kubuntu był następujący:

alias clc="echo -en '\033c\033[3J'"

Możesz użyć, clsaby zachować tradycję systemu Windows, użyć wersji Matlab clclub własnej. Powodzenia!

Charles Bell
źródło
2

Inna alternatywa dla odpowiedzi @ Hibou57:

# The Octal Way
alias clear="echo -e '\033c\c'"

LUB

# The Hex Way
alias clear="echo -e '\x1b\c'"

Zasadniczo będzie to miało dokładnie ten sam efekt, wypisze ^[znak (który wyczyści twój terminal) i nie wyświetli końcowej nowej linii.

TwystO
źródło
Korekta Nieznaczne: wypisuje ^[znak (ESC) a następnie z ccharakterem, a nie tylko ^[sam charakter. Łącznie stanowią one kod terminala „RIS”, co powoduje reset. Więcej informacji: xfree86.org/4.8.0/ctlseqs.html
jwd