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

Я случайно ввел ctrl + L в терминале, и мое окно терминала перешло один 'экранный' размер. Я посмотрел на сочетания клавиш в "Редактировании"-> "Горячие клавиши" и не нашел тот ярлык.

Что делает ctrl + L, делают и где он определяется?

47
задан 14 March 2014 в 19:16

4 ответа

ctrl + L просто очищает экран терминала.

Это сочетание клавиш, эквивалентное команде clear -x . ref

Это свойство 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 .

63
ответ дан 16 November 2019 в 10:38

Если оболочка вы вы используете не перехват, вы набираете в терминале символ "Form-feed". Если приложение терминала не перехватывает или не использует нажатие клавиши каким-либо образом, Ctrl + Letter преобразуется в код ASCII буквы минус 64 (1). 65 - это код ASCII для «A», «L» - это 12-я буква -> код 76. Если оболочка не знает, что делать с кодом, она печатает его.

Печать символа FF приводила к появлению новой страницы на строчном принтере и четкому экрану на терминале (да, тогда я использовал VT-52 со скоростью 300 бод).

Итак Ctrl + L равно 12, что соответствует FF. Таким же образом Ctrl + I - это ВКЛАДКА, а Ctrl + G звонит в звонок - если терминал или оболочка не перехватывает его, например Ctrl + C .

Обратите внимание на другой ответ: похоже, что bash выполняет перехват CTRL - L и выполняет очистку . Приятно, что авторы bash связали ключ с командой, которая будет делать более или менее то же самое, что код ASCII делал на старых терминалах!

С другой стороны, в моем zsh комбинация CTRL - I работает как TAB и CTRL - H как Backspace (2).

Старый красивый ASCII ... (обратите внимание, что буква L находится в столбце 4, строке 12, она имеет код ASCII 4 * 16 + 12 = 76).

Image from Wikimedia commons

Исходное изображение здесь , из статьи в Википедии о ASCII .


Сноски:

(1) Ctrl действительно используется для очистки бита 7.

(2) это источник шутки «не удается удалить слово», которую вы иногда находите, например, «это была плохо ^ H ^ H ^ HНе такая хорошая идея "... (обычно слово сильнее плохого!)

20
ответ дан 16 November 2019 в 10:38

Control-L перехватывается и интерпретируется bash (на самом деле библиотекой readline , которая обрабатывает интерактивное редактирование в командной строке) . Он привязан к функции clear-screen , как писал @souravc.

Примечание о значении Control-L : Он определен как «Подача формы» в таблице символов ASCII, но это ничего не значит, если какая-то программа не интерпретирует его соответствующим образом. Терминал не очищает экран, когда видит подачу страницы, в чем вы можете убедиться, сохранив ^ L в файле и распечатав файл с помощью cat . Когда bash / readline видит ^ L , он выполняет функцию clear-screen . Это отправляет последовательность символов, которую понимает ваш эмулятор терминала (как описано с помощью termcap или terminfo), и имеет эффект очистки экрана.

В очень старых принтерах ^ L будет продвигаться вперед бумага начинает печатать на следующем листе, отсюда и название «подача страницы». Но современные терминалы и эмуляторы терминалов следуют новому стандарту ANSI, в котором управляющие команды представляют собой многосимвольные «escape-коды» , которые начинаются с ^ [ (escape). Когда bash видит ваш ^ L , он, вероятно, отправляет последовательность из двух команд ESC [H ESC [J , которая перемещается в левый верхний угол экрана и очищает все, что находится под ним ( отсюда весь экран).

7
ответ дан 16 November 2019 в 10:38

Поскольку все уже объяснили вполне прилично, что Ctrl + L и делает, но никто не объяснил, как "инвертировать" команду, здесь несколько команд, которые можно ввести для возвращения Вас к тому, что Вы делали:

history

даст Вам последние 20 команд, которые Вы ввели.

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

даст Вам последние 20 строк вывода любой установки пакета, которую Вы выполняли

0
ответ дан 16 November 2019 в 10:38

Другие вопросы по тегам:

Похожие вопросы: