Я случайно ввел ctrl + L в терминале, и мое окно терминала перешло один 'экранный' размер. Я посмотрел на сочетания клавиш в "Редактировании"-> "Горячие клавиши" и не нашел тот ярлык.
Что делает ctrl + L, делают и где он определяется?
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 .
Если оболочка вы вы используете не перехват, вы набираете в терминале символ "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).
Исходное изображение здесь , из статьи в Википедии о ASCII .
(1) Ctrl действительно используется для очистки бита 7.
(2) это источник шутки «не удается удалить слово», которую вы иногда находите, например, «это была плохо ^ H ^ H ^ HНе такая хорошая идея "... (обычно слово сильнее плохого!)
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
, которая перемещается в левый верхний угол экрана и очищает все, что находится под ним ( отсюда весь экран).
Поскольку все уже объяснили вполне прилично, что Ctrl + L и делает, но никто не объяснил, как "инвертировать" команду, здесь несколько команд, которые можно ввести для возвращения Вас к тому, что Вы делали:
history
даст Вам последние 20 команд, которые Вы ввели.
tail --lines=20 /var/log/dpkg.log
даст Вам последние 20 строк вывода любой установки пакета, которую Вы выполняли