UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

191 lines (116 loc) 11.2 kB
**Readline** - это библиотека, созданная [GNU Project](/index.php/GNU_Project "GNU Project"), используемая [Bash](/index.php/Bash_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Bash (Русский)") и другими программами с интерфейсом CLI для того, чтобы взаимодействовать с командной строкой. Перед прочтением этой статьи пожалуйста ознакомьтесь с домашней [страницей](http://www.gnu.org/s/readline/) проекта, т.к. здесь размещена только общая информация. ## Contents * [1 Редактирование в командной строке](#.D0.A0.D0.B5.D0.B4.D0.B0.D0.BA.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B2_.D0.BA.D0.BE.D0.BC.D0.B0.D0.BD.D0.B4.D0.BD.D0.BE.D0.B9_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.B5) * [2 История команд](#.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F_.D0.BA.D0.BE.D0.BC.D0.B0.D0.BD.D0.B4) * [2.1 Поиск по истории](#.D0.9F.D0.BE.D0.B8.D1.81.D0.BA_.D0.BF.D0.BE_.D0.B8.D1.81.D1.82.D0.BE.D1.80.D0.B8.D0.B8) * [2.1.1 Избежание повторов](#.D0.98.D0.B7.D0.B1.D0.B5.D0.B6.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D0.BE.D0.B2.D1.82.D0.BE.D1.80.D0.BE.D0.B2) * [2.1.2 Удаление пробелов в начале строки](#.D0.A3.D0.B4.D0.B0.D0.BB.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BF.D1.80.D0.BE.D0.B1.D0.B5.D0.BB.D0.BE.D0.B2_.D0.B2_.D0.BD.D0.B0.D1.87.D0.B0.D0.BB.D0.B5_.D1.81.D1.82.D1.80.D0.BE.D0.BA.D0.B8) * [3 Макросы](#.D0.9C.D0.B0.D0.BA.D1.80.D0.BE.D1.81.D1.8B) * [4 Советы и хитрости](#.D0.A1.D0.BE.D0.B2.D0.B5.D1.82.D1.8B_.D0.B8_.D1.85.D0.B8.D1.82.D1.80.D0.BE.D1.81.D1.82.D0.B8) * [4.1 Отключение ^C](#.D0.9E.D1.82.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.B8.D0.B5_.5EC) ## Редактирование в командной строке По умолчанию Readline использует стиль сокращений Emacs для взаимодействия с командной строкой. Однако стиль редактирования vi также поддерживается. Так или иначе, библиотека предлагает огромный набор клавиатурных сокращений для редактирования вводимых данных [без использования клавиш управления курсором.](/index.php/Keyboard_without_cursor_keys "Keyboard without cursor keys") Если вы являетесь пользователем [vi](/index.php/Vim_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Vim (Русский)") или [vim](/index.php/Vim_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Vim (Русский)"), возможно, вы захотите добавить следующую строку в `~/.inputrc` для включения сочетаний клавиш в стиле vi: ``` set editing-mode vi ``` Другой способ включить vi-сочетания клавиш - дописать следующую строку в `~/.bashrc`: ``` set -o vi ``` Полезная информация по каждому стилю сокращений: [vi](http://www.catonmat.net/download/bash-vi-editing-mode-cheat-sheet.pdf)-стиль; [emacs](http://www.catonmat.net/download/readline-emacs-editing-mode-cheat-sheet.pdf)-стиль. ## История команд Обычно при нажатии кнопки "стрелка вверх", в приглашение командной строки подставляется последняя введенная команда вне зависимости от того, что набрал пользователь в момент нажатия. Однако, некоторые пользователи предпочитают, чтобы нажатие кнопки "стрелка вверх" вызывало список только тех команд, которые подходят к тому, что они набрали в момент нажатия. Например, если пользователь вводил следующие команды: * `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` (из [этого поста](https://bbs.archlinux.org/viewtopic.php?pid=428760#p428760)): ``` 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`, если вы хотите избежать странных вещей вроде [этой](https://bbs.archlinux.org/viewtopic.php?id=112537): ``` $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 ``` ### Поиск по истории #### Избежание повторов Если вы несколько раз повторяете ввод одной и той же команды, она запишется в историю ввода несколько раз. Чтобы избежать этого, добавьте в `~/.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](https://www.archlinux.org/packages/?name=readline) терминал выводит на экран `^C` после нажатия `Ctrl+C`. Если вы хотите отключить это, просто добавьте следующую строку в `~/.inputrc`: ``` set echo-control-characters off ```