# Readline (Русский)

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Readline - это библиотека, созданная GNU Project, используемая Bash и другими программами с интерфейсом CLI для того, чтобы взаимодействовать с командной строкой. Перед прочтением этой статьи пожалуйста ознакомьтесь с домашней страницей проекта, т.к. здесь размещена только общая информация.

## Редактирование в командной строке

По умолчанию Readline использует стиль сокращений Emacs для взаимодействия с командной строкой. Однако стиль редактирования vi также поддерживается. Так или иначе, библиотека предлагает огромный набор клавиатурных сокращений для редактирования вводимых данных без использования клавиш управления курсором.

Если вы являетесь пользователем vi или vim, возможно, вы захотите добавить следующую строку в `~/.inputrc` для включения сочетаний клавиш в стиле vi:

    set editing-mode vi

Другой способ включить vi-сочетания клавиш - дописать следующую строку в `~/.bashrc`:

    set -o vi

Полезная информация по каждому стилю сокращений: vi-стиль; emacs-стиль.

## История команд

Обычно при нажатии кнопки "стрелка вверх", в приглашение командной строки подставляется последняя введенная команда вне зависимости от того, что набрал пользователь в момент нажатия. Однако, некоторые пользователи предпочитают, чтобы нажатие кнопки "стрелка вверх" вызывало список только тех команд, которые подходят к тому, что они набрали в момент нажатия.

Например, если пользователь вводил следующие команды:

- `ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig`
- `who`
- `mount`
- `man mount`

В данной ситуации, набрав `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
    # these are for vi-command mode
    "\e[A": history-search-backward
    "\e[B": history-search-forward
    set keymap vi-insert
    # these are for vi-insert mode
    "\e[A": history-search-backward
    "\e[B": history-search-forward
    $endif

Также рекомендуется добавить следующую строка в начало файла `~/.inputrc`, если вы хотите избежать странных вещей вроде этой:

    $include /etc/inputrc

В качестве альтернативы можно использовать реверсивную историю поиска путем нажатия `Ctrl+R`. Реверсивная история поиска основана не на предыдущем вводе, а вместо этого ищет в буфере истории команд те, которые похожи на текущий ввод. Повторное нажатие `Ctrl+R` в этом режиме отобразит предыдущую строку из буфера, которая подходит под текущее условие поиска, а нажатие `Ctrl+G` отменит поиск и вернет текущую введенную строку. Таким образом, чтобы выполнить поиск среди ранее введенных команд `mount`, нажмите `Ctrl+R`, введите 'mount' и продолжайте нажимать `Ctrl+R` до тех пор, пока не отобразится нужная вам строка.

Обратный эквивалент этого режима называется forward-search-history и по умолчанию привязан к `Ctrl+S`. Имейте в виду, что большинство эмуляторов терминала переназначает комбинацию `Ctrl+S` на приостановку текущей задачи до нажатия `Ctrl+Q` (так называемый контроль потока XON/XOF). Для активации forward-search-history/деактивации контроля потока выполните:

    $ stty -ixon

либо переназначьте комбинацию клавиш в `inputrc`, например, на `Alt+S`, которая ничем не занята по умолчанию:

    "\es":forward-search-history

### Поиск по истории

This article or section is a candidate for merging with Bash.

Notes: не о Readline (Discuss in Talk:Readline (Русский)#)

#### Избежание повторов

Если вы несколько раз повторяете ввод одной и той же команды, она запишется в историю ввода несколько раз. Чтобы избежать этого, добавьте в `~/.bashrc`:

    export HISTCONTROL=ignoredups

#### Удаление пробелов в начале строки

Чтобы отключить запись в историю команд строк, начинающихся с пробелов, добавьте в `~/.bashrc`:

    export HISTCONTROL=ignorespace

Если `~/.bashrc` уже содержит

    export HISTCONTROL=ignoredups

замените строку на:

    export HISTCONTROL=ignoreboth

## Макросы

В Readline также реализована поддержка назначения клавиш на клавиатурные макросы. Вот простой пример, запустите эту команду в Bash:

    bind '"\ew":"\C-e # macro"'

Или добавьте ее часть в inputrc:

    "\ew":"\C-e # macro"

Теперь наберите команду и нажмите `Alt`+`W`. Readline отреагирует на это, как если бы была нажата комбинация `Ctrl+E` (end-of-line, конец строки).

Используйте любые сочетания клавиш с макросами Readline для автоматизации часто используемых задач. Например, такой макрос при нажатии `Ctrl+Alt+L` добавляет к строке " | less" и запускает команду (`Ctrl+M` is equivalent to `Enter`):

    "\e\C-l":"\C-e | less\C-m"

Следующий макрос добавляет в начало команды "yes | " при нажатии `Ctrl+Alt+Y` для того, чтобы согласиться на любой вопрос "yes/no", задаваемый командой:

    "\e\C-y":"\C-ayes | \C-m"

Этот пример разрывает строку на `su -c ''`, если была нажата комбинация `Alt+S`:

    "\es":"\C-a su -c '\C-e'\C-m"

Следующий пример добавляет в начало команды `sudo` при нажатии `Alt+S`. Она безопаснее, т.к. не передает нажатие клавиши {{ic|Enter}.

    "\es":"\C-asudo \C-e"

В последнем примере показано, как быстро отправить команду на выполнение в бэкграунд используя сочетание `Ctrl+Alt+B` и игнорируя весь ее вывод:

    "\e\C-b":"\C-e > /dev/null 2>&1 &\C-m"

## Советы и хитрости

### Отключение ^C

После обновления readline терминал выводит на экран `^C` после нажатия `Ctrl+C`. Если вы хотите отключить это, просто добавьте следующую строку в `~/.inputrc`:

    set echo-control-characters off

Hidden category:

- Pages or sections flagged with Template:Merge