Readline (Русский)
Состояние перевода: На этой странице представлен перевод статьи Readline. Дата последней синхронизации: 11 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Readline — библиотека GNU Project, которую Bash и другие программы с CLI-интерфейсом используют для взаимодействия с командной строкой. Подробнее см. readline(3) .
Установка
Вероятнее всего, пакет readline уже установлен как зависимость Bash.
Режим редактирования
По умолчанию Readline использует для взаимодействия с командной строкой комбинации клавиш в стиле Emacs. Чтобы выбрать стиль vi, добавьте следующую строку в файл ~/.inputrc :
Если вы хотите задать этот режим только для Bash, отредактируйте ~/.bashrc :
Индикатор режима в приглашении
Редактирование в стиле vi имеет два режима: командный и вставки. Настроить отображение индикатора режима можно следующей опцией:
Теперь в вашем приглашении будет отображаться строка-индикатор (по умолчанию — (cmd) / (ins) ), которую можно модифицировать переменными vi-ins-mode-string и vi-cmd-mode-string .
Разные формы курсора для режимов
set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2
Здесь для командного режима выбран курсор-блок, а для режима вставки — вертикальная линия. Чтобы это работало, необходимо включить индикатор режима редактирования (см. #Индикатор режима в приглашении).
В виртуальной консоли используются другие коды управляющих последовательностей, так что сначала необходимо проверить, какой терминал используется:
$if term=linux set vi-ins-mode-string \1\e[?0c\2 set vi-cmd-mode-string \1\e[?8c\2 $else set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2 $endif
Быстрое перемещение по словам
Xterm поддерживает перемещение по словам клавишами Ctrl+Left и Ctrl+Right по умолчанию. Чтобы настроить этот эффект в других эмуляторах, выберите подходящие коды терминала и присвойте их переменным backward-word и forward-word в файле ~/.inputrc .
"\e[1;5D": backward-word "\e[1;5C": forward-word
История команд
Обычно нажатие клавиши «стрелка вверх» выводит последнюю команду вне зависимости от того, что было (частично) введено на данный момент. Более практично будет искать только те прошлые команды, которые совпадают с текущим вводом.
Например, пользователь вводил следующие команды:
Если в этой ситуации набрать ls и нажать стрелку, текущий ввод будет заменён на man mount , последнюю выполненную команду. Если поиск по истории включён, то показываться будут только прошлые команды, начинающиеся с ls (текущий ввод), в данном случае — ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig .
Включить режим поиска по истории можно следующими строками в /etc/inputrc или ~/.inputrc :
"\e[A": history-search-backward "\e[B": history-search-forward
Если вы используете режим vi, то добавьте следующие строки в ~/.inputrc (из этого сообщения):
set editing-mode vi $if mode=vi set keymap vi-command # для командного режима vi "\e[A": history-search-backward "\e[B": history-search-forward j: history-search-forward k: history-search-backward set keymap vi-insert # для режима вставки vi "\e[A": history-search-backward "\e[B": history-search-forward $endif
Если вы настраивали файл ~/.inputrc , то рекомендуется добавить в него ещё одну строку, чтобы избежать странных вещей вроде этой:
В качестве альтернативы можно использовать инкрементный поиск по комбинации Ctrl+R . В этом случае поиск будет вестись не по последним командам, а по похожим. Повторное нажатие Ctrl+R при работе в этом режиме отобразит предыдущую строку в буфере, совпадающую с текущей строкой поиска, а Ctrl+G отменит поиск и восстановит текущий ввод. Так, чтобы поиск шёл среди ранее выполненных команд mount , нажмите Ctrl+R , введите ‘mount’ и продолжайте нажимать Ctrl+R , пока не дойдёте до нужной команды.
Обратный (вперёд) эквивалент этого режима называется forward-search-history и привязан к комбинации Ctrl+S . Правда, в большинстве терминалов комбинация Ctrl+S переопределена на приостановку выполнения програмы до нажатия Ctrl+Q (т.н. управление выполнением XON/XOFF). Для активации forward-search-history либо отключите управление потоком выполнения:
либо назначьте в inputrc другую комбинацию. Например, можно использовать Alt+S :
Быстрое завершение
При автодополнении (tab completion) одиночное нажатие клавиши tab пытается дополнить команду. Если частичное дополнение невозможно, двукратное нажатие покажет все возможные завершения.
Можно изменить двойное нажатие на одиночное:
set show-all-if-unmodified on
Либо же можно настроить, чтобы такое одиночное нажатие выполняло оба действия: дополнение слова и показ всех возможных завершений, если полное дополнение невозможно:
set show-all-if-ambiguous on
Цветное завершение
Включить цветное отображение имён файлов можно опцией colored-stats . При желании можно настроить подсветку одинакового префикса в списке возможных завершений опцией colored-completion-prefix . Например:
# Цвет файла в зависимости от типа # Может вызвать мерцание текста в некоторых терминалах (например, xterm) set colored-stats On # Добавление символа для обозначения типа set visible-stats On # Пометить каталоги-ссылки set mark-symlinked-directories On # Цветовое выделение общего префикса set colored-completion-prefix On # Цветовое выделение общего префикса и завершение с помощью меню set menu-complete-display-prefix On
Макросы
Readline позволяет привязывать клавиатурные макросы на клавиши. Например, выполните эту команду в Bash:
или добавьте строку внутри одиночных кавычек в inputrc:
Теперь введите любую строку и нажмите Alt + W . Readline будет действовать как при нажатии Ctrl+E (end-of-line) с добавлением в конце строки » # macro «.
Макросы позволяют автоматизировать часто используемые идиомы. Например, добавление «| less» к строке и «нажатие» Ctrl+M (эквивалент Enter ) по комбинации Ctrl+Alt+L :
Добавление префикса ‘yes |’ по нажатию Ctrl+Alt+Y , в результате чего программа получит утвердительный ответ на любой вопрос «да/нет»:
Добавление префикса su -c » по нажатию Alt+S :
Добавление префикса sudo по нажатию Alt+S . Несколько безопаснее, чем предыдущий пример, потому что не происходит нажатия Enter :
Наконец, быстрый перевод программы в фоновый режим выполнения с удалением всего вывода по комбинации Ctrl+Alt+B .
Отключение отображения клавиши control
Readline выдаёт в терминал строку ^C при нажатия Ctrl+C . Чтобы это отключить, просто добавьте следующие строки в ~/.inputrc :
set echo-control-characters off