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?
command-line
shortcut-keys
Parto
źródło
źródło
clear
, ponieważ nie wymazać historię terminala, natomiast komendaclear
robi, chyba że dodasz-x
argumentu, tak:clear -x
.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, żebash
autorzy skojarzyli klawisz z poleceniem, które zrobi mniej więcej tyle samo, co kod ASCII na starych terminalach!Z drugiej strony, w mojej
zsh
kombinacji 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).
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!)
źródło
^H
i^W
liter jest przydatne, gdy nie można użyć przekreślenia. :)Control-L
jest przechwytywany i interpretowany przez bash (faktycznie od tejreadline
biblioteki , która obsługuje interaktywne edycji w wierszu poleceń). Jest związany zclear-screen
funkcją, 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
. Kiedybash/readline
zobaczy^L
, wykonujeclear-screen
funkcję. 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
^L
przesuwa 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).źródło
ESC [ ESC [ J
usuwa również historię poleceń, podczas gdyCTRL + L
sekwencja nie. Sekwencja wysyłane do terminala jest raczejESC [ H ESC [ 2 J
śmiało próbować sobie z tym poleceniem:printf "\033[H\033[2J"
.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ś:
da ci 20 ostatnich wpisanych poleceń.
poda ostatnie 20 wierszy danych wyjściowych dowolnej instalacji pakietu, którą wykonywałeś
źródło