Вопрос

С точки зрения программирования, когда вы настраиваете оболочку 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).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top