Bash использование vi или emacs - PullRequest
6 голосов
/ 13 ноября 2009

С точки зрения программирования, когда вы устанавливаете оболочку bash для использования vi или emacs через

set -o vi

или

set -o emacs

Что на самом деле здесь происходит? Я читал книгу, в которой утверждается, что оболочка bash использует любой из этих редакторов для ввода самой оболочки, но я подумала, что она могла использовать readline.

Ответы [ 4 ]

6 голосов
/ 13 ноября 2009

Bash все еще использует readline. Readline использует либо режим emacs, либо vi и устанавливает режим переключения между различными режимами редактора. Вы можете проверить папку lib / readline в базовом исходном коде, чтобы увидеть различные привязки клавиш.

1 голос
/ 13 ноября 2009

Согласно справочной странице 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).
1 голос
/ 13 ноября 2009

Из того, что я знаю, readline - это то, что обеспечивает функциональность редактирования строки для bash.

Одно условие: когда вы нажимаете v в командном режиме vi, вы получаете полноценный редактор vi для редактирования командной строки.

С man bash:

1012 * БИБЛИОТЕКА READLINE * Это библиотека, которая обрабатывает вводимые данные при использовании интерактивной оболочки, если при вызове оболочки не указана опция --noediting. По умолчанию команды редактирования строк аналогичны командам emacs. Интерфейс редактирования линии в стиле vi также доступен. Чтобы отключить редактирование строки после запуска оболочки, используйте опции +o emacs или +o vi для встроенной функции set.

Когда оболочка выдает вам приглашение (если вы не находитесь в режиме без редактирования), вы уже используете readline. Вы будете либо в режиме emacs, либо в режиме вставки vi (вот почему вы можете просто использовать ESC, чтобы вернуться в режим команд vi).

1 голос
/ 13 ноября 2009

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

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