Ctrl + L в терміналі


41

Я випадково набрав ctrl+ Lу терміналі, і у моєму вікні терміналу вискочив один розмір екрана. Я переглянув комбінації клавіш у "Редагувати" -> "Комбінації клавіш" і не знайшов цього ярлика.

Що робить ctrl+ Lі де це визначено?

Відповіді:


58

ctrl+ Lпросто очистіть екран терміналу.

Це еквівалент клавіш швидкого клавіатури clear -x. вип

Це властивість bash, тому ви не знайшли його під комбінацією клавіш у своєму gnome-терміналі. Від 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.

Дивіться детальний список комбінацій клавіш Bash .


О, це пояснює це.
Парто

3
Це не просто башти, хоча; Ctrl-L - символ подачі форми. Це не так часто, але іноді ви побачите ^ L у вихідному коді, що розділяє «сторінки» коду. Було більше сенсу, коли принтер інтерпретуватиме його як контрольний символ.
Джошуа Тейлор

@JoshuaTaylor ви праві. Стаття про схожі вікі на тему « Перерва сторінки»
souravc

1
^ L - символ подачі форми у таблиці ascii, але це нічого не робить, якщо його не отримає програма, яка відповідно обробляє її (або bash, або термінальний емулятор, у цьому контексті).
alexis

1
Зверніть увагу , що це не є еквівалентом команди за замовчуванням clear, тому що вона не стирає вашу історію терміналу, в той час як команда clearробить, якщо ви не додасте -xаргумент, так як: clear -x.
Джиріслав

18

Якщо оболонка, яку ви використовуєте, не перехоплює її, ви вводите символ "Форма подачі" у своєму терміналі. Якщо термінальна програма не перехоплює або не використовує натискання клавіші якимось чином, Ctrl+ Letter переводиться на ASCII код літери мінус 64 (1). 65 - код ASCII 'A', 'L' - 12-та літера -> код 76. Якщо оболонка не знає, що робити з кодом, вона друкує її.

Друк символу FF призвів до появи нової сторінки на лінійному принтері та чіткого екрана на терміналі (так, я тоді використовував VT-52 , при 300 бодах).

Отже Ctrl+ Lдорівнює 12, що є FF. Таким же чином Ctrl+ Iє TAB, і Ctrl+ Gдзвонить у дзвінок --- якщо термінал або оболонка не перехоплює його, як Ctrl+ Cнаприклад.

Зверніть увагу , з іншого відповідь: здається , що Баш робити перехоплення CTRL- Lі робити clear. Приємно, що bashавтори асоціювали ключ із командою, яка зробить більш-менш те саме, що і ASCII-код на старих терміналах!

З іншого боку, у моєму zshпоєднанні CTRL- Iпрацює як TABі CTRL- Hяк Backspace(2).

Старий хороший ASCII ... (зауважте, що літера L знаходиться у колонці 4, рядок 12, вона має код ASCII 4 * 16 + 12 = 76).

Зображення з Вікісховища

Оригінальне зображення тут , зі статті Вікіпедії про ASCII .


Виноски:

(1) Ctrlдійсно використовується для очищення біта 7.

(2) це джерело жарту "не вдалося вилучити", колись знайдеш, як, наприклад, "це було погано ^ H ^ H ^ Не так приємна ідея" ... (звичайно, слово сильніше, ніж погано!)


1
Приємно. Як я можу до речі використовувати цю діаграму? Я бачу, що літера L знаходиться в рядку 12 та стовпці 4. Чи я тоді лише мінус 32 від 124 або як ви обчислюєте код ASCII?
Парто

@AvatarParto ups, написав 32 замість 65. Відповідь виправлена. Таблиця є двійковою, тому код - стовпчик * 16 + рядок.
Рмано

1
Вставлення буквальних ^Hs або ^Ws приємно, коли ви не можете використовувати закреслення. :)
Blacklight Shining

8

Control-Lперехоплений і інтерпретується Баш ( на насправді з допомогою в readlineбібліотеці , яка обробляє інтерактивне редагування в командному рядку). Він пов'язаний з clear-screenфункцією, як писав @souravc.

Зауважте про значення Control-L: У таблиці символів ASCII вона визначається як Feed Feed, але це нічого не означає, якщо якась програма не інтерпретує її відповідно. Термінал не очищає екран, коли він бачить канал форми, як це можна перевірити, збереживши ^ L у файлі та роздрукувавши файл із cat. Коли bash/readlineбачить ^L, він виконує clear-screenфункцію. Це посилає послідовність символів, яку розуміє ваш емулятор терміналу (як описано терміном cap або terminfo), і має ефект очищення екрана.

У дуже старих принтерах a ^Lзаздалегідь почав би друкувати папір на наступному аркуші, звідси і назва "feed feed". Але сучасні термінали та емулятори терміналів відповідають новому стандарту ANSI, в якому команди управління - це багатозначні «коди втечі», які починаються з ^[(escape). Коли bash бачить ваш ^L, він, ймовірно, надсилає послідовність з двома командами ESC [ H ESC [ J, яка рухається у верхній лівій частині екрана і очищає все, що знаходиться під ним (звідси і весь екран).


Насправді послідовність ESC [ ESC [ Jтакож очищає історію команд, в той час як CTRL + L послідовність цього не відбувається. Послідовність відсилаються терміналу швидше ESC [ H ESC [ 2 J, йти вперед спробуйте самі з цією командою: printf "\033[H\033[2J".
Джиріслав

0

Оскільки всі вже досить добре пояснили, що означає Ctrl+ Lі що робити, але ніхто не пояснив, як "повернути" команду, ось кілька команд, які ви можете набрати, щоб повернути вас до того, що ви робили:

history

дасть вам останні 20 введених команд.

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

дасть вам останні 20 рядків виводу будь-якої інсталяції пакета, яку ви виконували

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.