Readline (Русский) - ArchWiki

# Readline (Русский)

From ArchWiki
Jump to navigation Jump to search

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

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

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

## Установка

Пакет readline, скорее всего, уже установлен как зависимость Bash

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

По умолчанию Readline использует стиль сокращений Emacs для взаимодействия с командной строкой. Однако стиль редактирования vi также поддерживается. Для включения сочетаний клавиш в стиле vi:

    ~/.inputrc

     set editing-mode vi

Чтобы включить такой режим только для Bash:

    ~/.bashrc

     set -o vi

### Индикатор режима при вводе

Имеется два режима редактирования vi - командый и вставочный. Вы можете включить отображение текущего режима:

    ~/.inputrc

    set show-mode-in-prompt on

Команда выше отображает строчку в вводе (по умолчанию `(cmd)`/`(ins)`). Ее можно отредактировать посредством переменных `vi-ins-mode-string` и `vi-cmd-mode-string`.

### Различные формы курсора для каждого из режимов

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

Примечания: пожалуйста, используйте первый аргумент шаблона для указания дополнительной информации. (обсуждение: Talk:Readline (Русский)#)

Вы можете установить различную форму курсора для каждого мода, используя "\1 .. \2" escapes:

    ~/.inputrc

    set vi-ins-mode-string \1\e[6 q\2
    set vi-cmd-mode-string \1\e[2 q\2

This will set a block shaped cursor when in command mode and a pipe cursor when in insert mode.

The Virtual Console uses different escape codes, so you should check first which term is being used:

    ~/.inputrc

    $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

See software cursor for VGA for further details.

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

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

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

- `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

Categories:

- Command-line (Русский)
- GNU (Русский)
- Русский

Hidden category:

- Pages or sections flagged with Template:Merge