Pregunta
Desde un punto de vista programático, cuando se establece la cáscara del golpe de usar vi o emacs a través de
set -o vi
o
set -o emacs
Lo que está pasando aquí? He estado leyendo un libro en el que afirma que el intérprete de comandos bash utiliza cualquiera de estos editores para la entrada al depósito propiamente dicho, pero pensé que podría haber usado readline.
Solución
Bash sigue utilizando readline. Readline usa emacs o vi ajuste de modo y el modo cambia entre los diferentes modos de edición. Puede comprobar la carpeta lib / readline en el código fuente base para ver las distintas asociaciones de teclas.
Otros consejos
De acuerdo con la página del manual BASH_BUILTINS (1) (en Fedora 8):
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
... (se pierden todas las opciones de una sola letra)
-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.Interpreto que el sentido de que bash se interpreta directamente los comandos de edición de línea. Esta opción se limita a establecer que comando configurado para utilizar. Consulte la página del manual de readline (3).
Utiliza las pulsaciones de teclado que son familiares para los usuarios de uno de esos editores para editar la línea de comandos.
Readline es la facilidad que ofrece esa característica a Bash y otros programas.
De 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.
Por lo que sé, readline
es lo que proporciona la funcionalidad de línea de edición para la fiesta.
Una condición:. Al pulsar v
en modo comando vi, se obtiene el editor vi
completo soplado para editar su línea de comandos
De man bash
:
READLINE
Esta es la biblioteca que se encarga de leer la entrada cuando se utiliza un shell interactivo, a menos que la opción--noediting
se da en la llamada concha. Por defecto, los comandos de edición de línea son similares a las de emacs. Una interfaz de edición de línea de estilo vi también está disponible. Para desactivar la edición de línea después de la cáscara se está ejecutando, utilice las opciones+o emacs
o+o vi
a la orden internaset
.
Cuando la cáscara se presenta con un mensaje (a menos que esté en el modo de edición no), usted es ya usando readline
. Ya sea que usted esté en el modo de emacs o el modo de inserción VI (que es por eso que sólo puede utilizar ESC
para volver a VI modo de comando).