Ctrl + L w terminalu

41

Przypadkowo wpisałem ctrl+ Lw terminalu, a moje okno terminalu przeskoczyło o jeden „ekranowy” rozmiar. Spojrzałem na skróty klawiaturowe w „Edycja” -> „Skróty klawiaturowe” i nie znalazłem tego skrótu.

Co robi ctrl+ Li gdzie jest zdefiniowane?

Parto
źródło

Odpowiedzi:

58

ctrl+ Lpo prostu wyczyść ekran terminala.

Jest to odpowiednik skrótu klawiaturowego polecenia clear -x. ref

Jest własnością bash, więc nie znalazłeś go pod skrótami klawiaturowymi w swoim terminalu gnome. Od 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.

Zobacz szczegółową listę skrótów klawiaturowych Bash .

souravc
źródło
Och, to wyjaśnia.
Parto
3
Ale to nie tylko bzdura; Ctrl-L jest znakiem wysuwu formularza. To nie jest tak powszechne, ale czasami zobaczysz ^ L w kodzie źródłowym oddzielającym „strony” kodu. Bardziej sensowne było interpretowanie go przez drukarkę jako znak kontrolny.
Joshua Taylor
@JoshuaTaylor masz rację. Powiązany artykuł wiki na temat łamania stron
souravc
1
^ L jest znakiem wysuwu formularza w tabeli ascii, ale to nic nie robi, chyba że zostanie odebrane przez program, który odpowiednio go traktuje (w tym kontekście albo bash, albo emulator terminala).
Alexis
1
Zauważ, że nie jest to równoznaczne z poleceniem domyślnej clear, ponieważ nie wymazać historię terminala, natomiast komenda clearrobi, chyba że dodasz -xargumentu, tak: clear -x.
jirislav
18

Jeśli używana powłoka nie przechwytuje jej, wpisujesz w terminalu znak „Form-feed”. Jeśli aplikacja terminalowa nie przechwytuje ani nie używa w jakiś sposób naciśnięcia klawisza, Ctrllitera + jest tłumaczona na kod ASCII litery minus 64 (1). 65 to kod ASCII „A”, „L” to 12. litera -> kod 76. Jeśli powłoka nie wie, co zrobić z kodem, drukuje go.

Wydrukowanie znaku FF zaowocowało nową stroną na drukarce liniowej i wyraźnym ekranem na terminalu (tak, wtedy użyłem VT-52 , przy 300 bodach).

Więc Ctrl+ Lwynosi 12, czyli FF. W ten sam sposób, Ctrl+ Ijest TAB, a Ctrl+ Gdzwoni dzwonkiem --- jeśli terminal lub powłoka go nie przechwytuje, jak na przykład Ctrl+ C.

Wskazówki od drugiej odpowiedzi: wydaje się, że bash zrobić przechwycić CTRL- Li zrobić clear. Miły akcent, że bashautorzy skojarzyli klawisz z poleceniem, które zrobi mniej więcej tyle samo, co kod ASCII na starych terminalach!

Z drugiej strony, w mojej zshkombinacji CTRL- Idziała jako TABi CTRL- Hjako Backspace(2).

Stary ładny ASCII ... (zauważ, że litera L znajduje się w kolumnie 4, wiersz 12, ma kod ASCII 4 * 16 + 12 = 76).

Obraz z Wikimedia commons

Oryginalny obraz tutaj , z artykułu w Wikipedii na temat ASCII .


Przypisy:

(1) Ctrlnaprawdę używany do wyczyszczenia bitu 7.

(2) to jest źródło żartu „nieusunięcia słowa”, który kiedyś można znaleźć, np. „To był zły ^ H ^ H ^ Nie taki fajny pomysł” ... (zwykle słowo mocniejsze niż złe!)

Rmano
źródło
1
Miły. Jak przy okazji skorzystać z tego wykresu? Widzę, że litera L znajduje się w wierszu 12 i kolumnie 4. Czy w takim razie po prostu minus 32 z 124 lub jak obliczyć kod ASCII?
Parto
@AvatarParto ups, napisał 32 zamiast 65. Odpowiedź poprawiona. Tabela jest binarna, więc kod to kolumna * 16 + wiersz.
Rmano
1
Wstawianie literałów ^Hi ^Wliter jest przydatne, gdy nie można użyć przekreślenia. :)
Blacklight Shining
8

Control-Ljest przechwytywany i interpretowany przez bash (faktycznie od tej readlinebiblioteki , która obsługuje interaktywne edycji w wierszu poleceń). Jest związany z clear-screenfunkcją, jak napisał @souravc.

Uwaga na temat znaczenia Control-L: Jest zdefiniowana jako Form Feed w tabeli znaków ASCII, ale to nic nie znaczy, chyba że jakiś program odpowiednio ją interpretuje. Terminal nie czyści ekranu, gdy widzi wysuw formularza, co można zweryfikować, zapisując ^ L w pliku i drukując plik za pomocą cat. Kiedy bash/readlinezobaczy ^L, wykonuje clear-screenfunkcję. To wysyła sekwencję znaków zrozumiałą dla emulatora terminala (zgodnie z opisem termcap lub terminfo) i powoduje wyczyszczenie ekranu.

W bardzo starych drukarkach a ^Lprzesuwa papier na następny arkusz, stąd nazwa „form feed”. Ale nowoczesne terminale i emulatory terminali są zgodne z nowszym standardem ANSI, w którym polecenia sterujące są wieloznakowymi „kodami ucieczki”, które zaczynają się od ^[(escape). Kiedy bash cię widzi ^L, prawdopodobnie wysyła sekwencję dwóch poleceń ESC [ H ESC [ J, która przesuwa się w lewy górny róg ekranu i czyści wszystko pod nim (stąd cały ekran).

Alexis
źródło
W rzeczywistości sekwencja ESC [ ESC [ Jusuwa również historię poleceń, podczas gdy CTRL + L sekwencja nie. Sekwencja wysyłane do terminala jest raczej ESC [ H ESC [ 2 Jśmiało próbować sobie z tym poleceniem: printf "\033[H\033[2J".
jirislav
0

Ponieważ wszyscy już dość dobrze wyjaśnili, co Ctrl+ Ljest i robi, ale nikt nie wyjaśnił, jak „odwrócić” polecenie, oto kilka poleceń, które możesz wpisać, aby wrócić do tego, co robiłeś:

history

da ci 20 ostatnich wpisanych poleceń.

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

poda ostatnie 20 wierszy danych wyjściowych dowolnej instalacji pakietu, którą wykonywałeś

Fabby
źródło