Синтаксис файла инициализации Readline
В файле инициализации Readline допускается лишь несколько основных конструкций. Пустые строки игнорируются. Строки, начинающиеся с «#», являются комментариями. Строки, начинающиеся с «$», обозначают условные конструкции (см. Условные конструкции инициализации). Другие строки задают значения переменных и привязки клавиш.
- Настройка переменных
-
Вы можете изменять поведение Readline во время выполнения, меняя значения переменных Readline с помощью команды
setв файле инициализации. Синтаксис прост:set variable value
Например, чтобы вместо привязки клавиш по умолчанию в стиле Emacs использовать команды редактирования строк в стиле
vi:set editing-mode vi
Имена и значения переменных, если это применимо, распознаются без учета регистра. Нераспознанные имена переменных игнорируются.
Логические переменные (те, которые могут принимать значения on или off) устанавливаются в on, если значение равно null или пусто, равно on (без учета регистра) или 1. При любом другом значении переменная устанавливается в off.
Команда
bind -Vвыводит имена и значения текущих переменных Readline. См. раздел Встроенные команды Bash.Многие аспекты поведения во время выполнения можно изменять с помощью следующих переменных.
-
active-region-start-color -
Строковая переменная, задающая цвет текста и фона при отображении текста в активной области (см. описание
enable-active-regionниже). Эта строка не должна занимать физические позиции символов на экране, поэтому она должна состоять только из управляющих последовательностей терминала. Она выводится в терминал перед отображением текста в активной области. Эта переменная сбрасывается в значение по умолчанию при каждой смене типа терминала. Значение по умолчанию — строка, переводящая терминал в режим выделения, как указано в описании терминала terminfo. Пример значения: ‘\e[01;33m’. -
active-region-end-color -
Строковая переменная, которая «отменяет» действие
active-region-start-colorи восстанавливает «обычный» вид экрана терминала после отображения текста в активной области. Эта строка не должна занимать физические позиции символов на экране, поэтому она должна состоять только из управляющих последовательностей терминала. Она выводится в терминал после отображения текста в активной области. Эта переменная сбрасывается в значение по умолчанию при каждой смене типа терминала. Значение по умолчанию — строка, возвращающая терминал из режима выделения, как указано в описании терминала terminfo. Пример значения: ‘\e[0m’. -
bell-style -
Определяет, что происходит, когда Readline требуется подать звуковой сигнал терминала. Если задано значение ‘none’, Readline никогда не подает сигнал. Если задано значение ‘visible’, Readline использует визуальный сигнал, если он доступен. Если задано значение ‘audible’ (по умолчанию), Readline пытается подать звуковой сигнал терминала.
-
bind-tty-special-chars -
Если задано значение ‘on’ (по умолчанию), Readline пытается связать управляющие символы, обрабатываемые драйвером терминала ядра особым образом, с соответствующими командами Readline. Эти привязки переопределяют описанные здесь привязки Readline по умолчанию. Введите ‘stty -a’ в командной строке Bash, чтобы просмотреть текущие настройки терминала, включая специальные управляющие символы (обычно
cchars). -
blink-matching-paren -
Если задано значение ‘on’, Readline при вставке закрывающей скобки пытается на короткое время переместить курсор к открывающей скобке. Значение по умолчанию — ‘off’.
-
colored-completion-prefix -
Если задано значение ‘on’, при выводе вариантов дополнения Readline отображает общий префикс возможных вариантов другим цветом. Определения цветов берутся из значения переменной окружения
LS_COLORS. Если вLS_COLORSзадан цвет для пользовательского суффикса ‘readline-colored-completion-prefix’, Readline использует этот цвет для общего префикса вместо цвета по умолчанию. Значение по умолчанию — ‘off’. -
colored-stats -
Если задано значение ‘on’, Readline отображает возможные варианты дополнения разными цветами, указывающими тип файла. Определения цветов берутся из значения переменной окружения
LS_COLORS. Значение по умолчанию — ‘off’. -
comment-begin -
Строка, которую команда
insert-commentвставляет в начало строки. Значение по умолчанию —"#". -
completion-display-width -
Количество столбцов экрана, используемых для отображения возможных совпадений при дополнении. Значение игнорируется, если оно меньше 0 или больше ширины экрана терминала. Значение 0 приводит к выводу каждого совпадения на отдельной строке. Значение по умолчанию — -1.
-
completion-ignore-case -
Если задано значение ‘on’, Readline выполняет поиск совпадений и дополнение имен файлов без учета регистра. Значение по умолчанию — ‘off’.
-
completion-map-case -
Если задано значение ‘on’ и включена переменная completion-ignore-case, при поиске совпадений и дополнении имен файлов без учета регистра Readline считает дефисы (‘-’) и символы подчеркивания (‘_’) эквивалентными. Значение по умолчанию — ‘off’.
-
completion-prefix-display-length -
Максимальная длина в символах общего префикса списка возможных вариантов дополнения, отображаемого без изменений. Если задано значение больше нуля, Readline заменяет общие префиксы, длина которых превышает это значение, многоточием при отображении возможных вариантов дополнения. Если дополнение начинается с точки и Readline дополняет имя файла, вместо многоточия используются три символа подчеркивания.
-
completion-query-items -
Количество возможных вариантов дополнения, при достижении которого у пользователя спрашивается, следует ли вывести список вариантов. Если количество возможных вариантов дополнения больше этого значения или равно ему, Readline спрашивает, хочет ли пользователь просмотреть их; в противном случае Readline просто выводит список вариантов. Значение этой переменной должно быть целым числом, большим или равным нулю. Нулевое значение означает, что Readline никогда не должен задавать вопрос; отрицательные значения считаются нулем. Ограничение по умолчанию —
100. -
convert-meta -
Если задано значение ‘on’, Readline преобразует считываемые символы с установленным восьмым битом в последовательность клавиш ASCII: сбрасывает восьмой бит и добавляет в начало символ ESC, преобразуя их в последовательности клавиш с префиксом meta. Значение по умолчанию — ‘on’, однако Readline устанавливает значение ‘off’, если локаль содержит символы, кодировки которых могут включать байты с установленным восьмым битом. Эта переменная зависит от категории локали
LC_CTYPEи может измениться при смене локали. Эта переменная также влияет на привязки клавиш; см. описаниеforce-meta-prefixниже. -
disable-completion -
Если задано значение ‘On’, Readline отключает дополнение слов. Символы дополнения вставляются в строку так, как если бы они были привязаны к
self-insert. Значение по умолчанию — ‘off’. -
echo-control-characters -
Если задано значение ‘on’, то в операционных системах, сообщающих о поддержке этой функции, Readline выводит символ, соответствующий сигналу, сгенерированному с клавиатуры. Значение по умолчанию — ‘on’.
-
editing-mode -
Переменная
editing-modeуправляет набором привязок клавиш по умолчанию. По умолчанию Readline запускается в режиме редактирования Emacs, в котором клавиши работают наиболее похоже на Emacs. Для этой переменной можно задать значение ‘emacs’ или ‘vi’. -
emacs-mode-string -
Если включена переменная show-mode-in-prompt, эта строка отображается непосредственно перед последней строкой основного приглашения командной строки, когда активен режим редактирования Emacs. Значение разворачивается так же, как привязка клавиш, поэтому доступны стандартный набор префиксов meta и control, а также экранирующие последовательности с обратной косой чертой. Экранирующие последовательности ‘\1’ и ‘\2’ обозначают начало и конец последовательностей непечатаемых символов; их можно использовать для встраивания управляющей последовательности терминала в строку режима. Значение по умолчанию — ‘@’.
-
enable-active-region -
Точка — это текущая позиция курсора, а метка обозначает сохраненную позицию курсора (см. раздел Команды перемещения). Текст между точкой и меткой называется областью. Если для этой переменной задано значение ‘On’, Readline позволяет некоторым командам помечать область как активную. Когда область активна, Readline подсвечивает находящийся в ней текст, используя значение
active-region-start-color, по умолчанию — строку, включающую режим выделения терминала. Активная область показывает текст, вставленный командой вставки в скобках, а также все совпадения, найденные при инкрементальном и неинкрементальном поиске в истории. Значение по умолчанию — ‘On’. -
enable-bracketed-paste -
Если задано значение ‘On’, Readline настраивает терминал так, чтобы каждая вставка добавлялась в буфер редактирования как единая строка символов, а не обрабатывалась посимвольно, как если бы каждый символ был введен с клавиатуры. Это называется включением режима вставки в скобках в терминале; этот режим не позволяет Readline выполнять команды редактирования, привязанные к последовательностям клавиш в вставленном тексте. Значение по умолчанию — ‘On’.
-
enable-keypad -
Если задано значение ‘on’, при вызове Readline пытается включить цифровую клавиатуру приложения. В некоторых системах это необходимо для работы клавиш со стрелками. Значение по умолчанию — ‘off’.
-
enable-meta-key -
Если задано значение ‘on’, при вызове Readline пытается включить все клавиши-модификаторы meta, поддержку которых заявляет терминал. На многих терминалах клавиша Meta используется для отправки восьмибитовых символов; эта переменная проверяет наличие у терминала возможности включать и выключать режим, в котором устанавливается восьмой бит символа (0200), если при вводе символа удерживается клавиша Meta (символ meta). Значение по умолчанию — ‘on’.
-
expand-tilde -
Если задано значение ‘on’, Readline пытается раскрывать тильду при дополнении слов. Значение по умолчанию — ‘off’.
-
force-meta-prefix -
Если задано значение ‘on’, Readline изменяет поведение при привязке последовательностей клавиш, содержащих \M- или
Meta-(см.Key Bindingsв разделе Синтаксис файла инициализации Readline), преобразуя последовательность клавиш вида \M-C илиMeta-C в двухсимвольную последовательность ESC C (добавляя префикс meta). Если дляforce-meta-prefixзадано значение ‘off’ (по умолчанию), Readline использует значение переменнойconvert-meta, чтобы определить, выполнять ли это преобразование: еслиconvert-metaимеет значение ‘on’, Readline выполняет описанное выше преобразование; если значение равно ‘off’, Readline преобразует C в символ meta, устанавливая восьмой бит (0200). Значение по умолчанию — ‘off’. -
history-preserve-point -
Если задано значение ‘on’, код истории пытается помещать точку (текущую позицию курсора) в одно и то же место в каждой строке истории, извлекаемой с помощью
previous-historyилиnext-history. Значение по умолчанию — ‘off’. -
history-size -
Задает максимальное количество записей истории, сохраняемых в списке истории. Если задано значение 0, все существующие записи истории удаляются, а новые не сохраняются. Если задано отрицательное значение, количество записей истории не ограничивается. По умолчанию Bash устанавливает максимальное количество записей истории равным значению переменной оболочки
HISTSIZE. Если попытаться задать для history-size нечисловое значение, максимальное количество записей истории будет установлено равным 500. -
horizontal-scroll-mode -
Если задать для этой переменной значение ‘on’, текст редактируемых строк будет прокручиваться по горизонтали в пределах одной экранной строки, если длина строк превышает ширину экрана, вместо переноса на новую экранную строку. Для терминалов высотой в одну строку значение этой переменной автоматически устанавливается в ‘on’. По умолчанию для этой переменной задано значение ‘off’.
-
input-meta -
Если задано значение ‘on’, Readline включает восьмибитовый ввод (то есть не сбрасывает восьмой бит считываемых символов) независимо от заявленной терминалом поддержки. Значение по умолчанию — ‘off’, однако Readline устанавливает значение ‘on’, если локаль содержит символы, кодировки которых могут включать байты с установленным восьмым битом. Эта переменная зависит от категории локали
LC_CTYPE, и ее значение может измениться при смене локали. Имяmeta-flagявляется синонимомinput-meta. -
isearch-terminators -
Строка символов, завершающих инкрементальный поиск без последующего выполнения введенного символа как команды (см. раздел Поиск команд в истории). Если для этой переменной не задано значение, инкрементальный поиск завершается символами ESC и C-j.
-
keymap -
Задает представление Readline о текущей раскладке клавиш для команд привязки клавиш. Встроенные имена
keymap:emacs,emacs-standard,emacs-meta,emacs-ctlx,vi,vi-move,vi-commandиvi-insert.viэквивалентноvi-command(vi-moveтакже является синонимом);emacsэквивалентноemacs-standard. Приложения могут добавлять дополнительные имена. Значение по умолчанию —emacs; значение переменнойediting-modeтакже влияет на раскладку клавиш по умолчанию. keyseq-timeout-
Задает время, в течение которого Readline будет ожидать ввода символа при считывании неоднозначной последовательности клавиш (такой, которая может образовать полную последовательность клавиш из уже считанного ввода или получить дополнительные символы для завершения более длинной последовательности клавиш). Если Readline не получает ввода за отведенное время, используется более короткая, но полная последовательность клавиш. Readline использует это значение, чтобы определить, доступен ли ввод в текущем источнике ввода (по умолчанию
rl_instream). Значение задается в миллисекундах, поэтому значение 1000 означает, что Readline будет ждать дополнительного ввода одну секунду. Если для этой переменной задано значение меньше или равное нулю либо нечисловое значение, Readline ждет нажатия другой клавиши, чтобы определить, какую последовательность клавиш завершить. Значение по умолчанию —500. mark-directories-
Если задано значение ‘on’, к дополненным именам каталогов добавляется косая черта. Значение по умолчанию — ‘on’.
-
mark-modified-lines -
Если для этой переменной задано значение ‘on’, Readline отображает звездочку (‘*’) в начале измененных строк истории. По умолчанию для этой переменной задано значение ‘off’.
-
mark-symlinked-directories -
Если задано значение ‘on’, к дополненным именам, являющимся символическими ссылками на каталоги, добавляется косая черта с учетом значения
mark-directories. Значение по умолчанию — ‘off’. -
Если для этой переменной задано значение ‘on’, Readline при дополнении имен файлов ищет совпадения среди файлов, имена которых начинаются с ‘.’ (скрытых файлов). Если задано значение ‘off’, пользователь должен указать начальную ‘.’ в дополняемом имени файла. По умолчанию для этой переменной задано значение ‘on’.
-
Если задано значение ‘on’, при дополнении по меню перед перебором списка отображается общий префикс возможных вариантов дополнения (который может быть пустым). Значение по умолчанию — ‘off’.
-
output-meta -
Если задано значение ‘on’, Readline отображает символы с установленным восьмым битом непосредственно, а не в виде экранирующих последовательностей с префиксом meta. Значение по умолчанию — ‘off’, однако Readline устанавливает значение ‘on’, если локаль содержит символы, кодировки которых могут включать байты с установленным восьмым битом. Эта переменная зависит от категории локали
LC_CTYPE, и ее значение может измениться при смене локали. -
page-completions -
Если задано значение ‘on’, Readline использует встроенную программу постраничного вывода, похожую на more(1), чтобы за раз отображать одну экранную страницу возможных вариантов дополнения. По умолчанию для этой переменной задано значение ‘on’.
prefer-visible-bell-
См.
bell-style. print-completions-horizontally-
Если задано значение ‘on’, Readline отображает варианты дополнения, располагая совпадения по горизонтали в алфавитном порядке, а не вертикально. Значение по умолчанию — ‘off’.
-
revert-all-at-newline -
Если задано значение ‘on’, перед возвратом из команды
accept-lineReadline отменяет все изменения строк истории. По умолчанию строки истории могут изменяться и сохранять отдельные списки отмены изменений при последующих вызовахreadline(). Значение по умолчанию — ‘off’. -
search-ignore-case -
Если задано значение ‘on’, Readline выполняет инкрементальный и неинкрементальный поиск в списке истории без учета регистра. Значение по умолчанию — ‘off’.
-
show-all-if-ambiguous -
Эта переменная изменяет поведение функций дополнения по умолчанию. Если задано значение ‘on’, при наличии у слова нескольких возможных вариантов дополнения совпадения сразу выводятся списком, а не подается звуковой сигнал. Значение по умолчанию — ‘off’.
-
show-all-if-unmodified -
Эта переменная изменяет поведение функций дополнения по умолчанию аналогично переменной show-all-if-ambiguous. Если задано значение ‘on’, при наличии у слова нескольких возможных вариантов дополнения, но отсутствии возможного частичного дополнения (возможные варианты не имеют общего префикса), совпадения сразу выводятся списком, а не подается звуковой сигнал. Значение по умолчанию — ‘off’.
-
show-mode-in-prompt -
Если задано значение ‘on’, в начало приглашения командной строки добавляется строка, указывающая режим редактирования: Emacs, режим команд vi или режим вставки vi. Строки режима задаются пользователем (например, emacs-mode-string). Значение по умолчанию — ‘off’.
-
skip-completed-text -
Если задано значение ‘on’, это изменяет поведение дополнения по умолчанию при вставке единственного совпадения в строку. Переменная действует только при дополнении в середине слова. Если функция включена, Readline не вставляет из дополнения символы, совпадающие с символами после точки в дополняемом слове, поэтому часть слова после курсора не дублируется. Например, если эта функция включена и попытаться выполнить дополнение, когда курсор находится после первой ‘e’ в слове ‘Makefile’, результатом будет ‘Makefile’, а не ‘Makefilefile’, если возможен только один вариант дополнения. Значение по умолчанию — ‘off’.
-
vi-cmd-mode-string -
Если включена переменная show-mode-in-prompt, эта строка отображается непосредственно перед последней строкой основного приглашения командной строки, когда активен режим редактирования vi и включен режим команд. Значение разворачивается так же, как привязка клавиш, поэтому доступны стандартный набор префиксов meta и control, а также экранирующие последовательности с обратной косой чертой. Экранирующие последовательности ‘\1’ и ‘\2’ обозначают начало и конец последовательностей непечатаемых символов; их можно использовать для встраивания управляющей последовательности терминала в строку режима. Значение по умолчанию — ‘(cmd)’.
-
vi-ins-mode-string -
Если включена переменная show-mode-in-prompt, эта строка отображается непосредственно перед последней строкой основного приглашения командной строки, когда активен режим редактирования vi и включен режим вставки. Значение разворачивается так же, как привязка клавиш, поэтому доступны стандартный набор префиксов meta и control, а также экранирующие последовательности с обратной косой чертой. Экранирующие последовательности ‘\1’ и ‘\2’ обозначают начало и конец последовательностей непечатаемых символов; их можно использовать для встраивания управляющей последовательности терминала в строку режима. Значение по умолчанию — ‘(ins)’.
-
visible-stats -
Если задано значение ‘on’, при выводе возможных вариантов дополнения к имени файла добавляется символ, обозначающий тип файла. Значение по умолчанию — ‘off’.
-
- Привязки клавиш
-
Синтаксис управления привязками клавиш в файле инициализации прост. Сначала нужно найти имя команды, привязку которой требуется изменить. В следующих разделах приведены таблицы с именами команд, привязками клавиш по умолчанию (если они есть) и кратким описанием действий команд.
Узнав имя команды, просто укажите в строке файла инициализации имя клавиши, к которой требуется привязать команду, двоеточие и затем имя команды. Между именем клавиши и двоеточием не должно быть пробелов: пробел будет считаться частью имени клавиши. Имя клавиши можно записать разными способами — выбирайте наиболее удобный для вас.
Помимо имен команд, Readline позволяет привязывать клавиши к строке, которая вставляется при нажатии клавиши (макросу). Макрос отличается от команды тем, что заключается в одинарные или двойные кавычки.
Команда
bind -pвыводит имена функций и привязки Readline в формате, который можно непосредственно поместить в файл инициализации. См. раздел Встроенные команды Bash.- keyname: function-name или macro
-
keyname — это имя клавиши, записанное словами на английском языке. Например:
Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output"
В приведенном выше примере C-u привязана к функции
universal-argument, M-DEL привязана к функцииbackward-kill-word, а C-o привязана к макросу, указанному справа (то есть к вставке текста ‘> output’ в строку).В этом синтаксисе привязки клавиш распознаются следующие символьные имена: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT (деструктивное удаление символа назад), SPACE, SPC и TAB.
- "keyseq": function-name или macro
-
keyseq отличается от описанного выше keyname тем, что здесь можно указать строки, обозначающие целую последовательность клавиш, заключив эту последовательность в двойные кавычки. Можно использовать некоторые экранирующие последовательности клавиш в стиле GNU Emacs, как в следующем примере, однако специальные символьные имена не распознаются.
"\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1"
В приведенном выше примере C-u снова привязана к функции
universal-argument(как и в первом примере), ‘C-x C-r’ привязана к функцииre-read-init-file, а ‘ESC [ 1 1 ~’ привязана к вставке текста ‘Function Key 1’.
При указании последовательностей клавиш доступны следующие экранирующие последовательности в стиле GNU Emacs:
\C-Префикс control.
\M-Добавление префикса meta или преобразование следующего символа в символ meta, как описано выше в разделе
force-meta-prefix(см.Variable Settingsв разделе Синтаксис файла инициализации Readline).\eСимвол escape.
\\Обратная косая черта.
\"", двойная кавычка.
\'', одинарная кавычка или апостроф.
Помимо экранирующих последовательностей в стиле GNU Emacs, доступен второй набор экранирующих последовательностей с обратной косой чертой:
\aсигнал (звонок)
\bзабой
\dудаление
\fперевод страницы
\nновая строка
\rвозврат каретки
\tгоризонтальная табуляция
\vвертикальная табуляция
\nnnВосьмибитовый символ со значением nnn в восьмеричной системе счисления (от одной до трех цифр).
\xHHВосьмибитовый символ со значением HH в шестнадцатеричной системе счисления (от одной до двух шестнадцатеричных цифр).
При вводе текста макроса его определение необходимо заключать в одинарные или двойные кавычки. Текст без кавычек считается именем функции. Описанные выше экранирующие последовательности с обратной косой чертой разворачиваются в теле макроса. Обратная косая черта позволяет экранировать любой другой символ в тексте макроса, включая ‘"’ и ‘'’. Например, следующая привязка позволит вставить один символ ‘\’ в строку при нажатии ‘C-x \’:
"\C-x\\": "\\"
Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/bash/manual/html_node/Readline-Init-File-Syntax.html