Использование Bash vi или emacs
-
19-09-2019 - |
Вопрос
С точки зрения программирования, когда вы настраиваете оболочку bash для использования vi или emacs через
set -o vi
или
set -o emacs
Что здесь происходит на самом деле?Я читал книгу, в которой утверждается, что оболочка bash использует любой из этих редакторов для ввода в саму оболочку, но я подумал, что, возможно, она использовала readline.
Решение
Bash все еще использует readline.Readline использует режим emacs или vi, а настройка режима переключает различные режимы редактора.Вы можете проверить папку lib/readline в базовом исходном коде, чтобы увидеть различные привязки клавиш.
Другие советы
Согласно справочной странице BASH_BUILTINS(1) (в Fedora 8):
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
...(пропуская все однобуквенные варианты)
-o option-name The option-name can be one of the following:
...
emacs Use an emacs-style command line editing interface. This is enabled by default when the shell is interactive, unless the shell is started with the --noediting option....
vi Use a vi-style command line editing interface.Я интерпретирую это так, что bash напрямую интерпретирует команды редактирования строк.Эта опция просто определяет, какой набор команд использовать.См. справочную страницу readline(3).
Для редактирования командной строки он использует нажатия клавиш, знакомые пользователям одного из этих редакторов.
Readline — это средство, которое предоставляет эту функцию Bash и другим программам.
От man bash
:
READLINE This is the library that handles reading input when using an interac‐ tive shell, unless the --noediting option is given at shell invocation. Line editing is also used when using the -e option to the read builtin. By default, the line editing commands are similar to those of emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time using the -o emacs or -o vi options to the set builtin (see SHELL BUILTIN COMMANDS below). To turn off line editing after the shell is running, use the +o emacs or +o vi options to the set builtin.
Насколько я знаю, readline
это то, что обеспечивает функциональность редактирования строк для bash.
Одно условие:когда ты нажимаешь v
в командном режиме vi вы получаете полный спектр возможностей vi
редактор для редактирования командной строки.
От man bash
:
ЧИТАТЬ ЛАЙН
Это библиотека, которая обрабатывает ввод данных при использовании интерактивной оболочки, если только--noediting
опция задается при вызове оболочки.По умолчанию команды редактирования строк аналогичны командам emacs.Также доступен интерфейс редактирования строк в стиле vi.Чтобы отключить редактирование строк после запуска оболочки, используйте команду+o emacs
или+o vi
варианты дляset
встроенный.
Когда оболочка выдает вам подсказку (если вы не находитесь в режиме без редактирования), вы уже с использованием readline
.Вы будете либо в режиме emacs, либо в режиме вставки vi (поэтому вы можете просто использовать ESC
чтобы вернуться в командный режим vi).