La página de manual de readline (3) enumera estos cuatro (vi, vi-move, vi-command, vi-insert) como posibles opciones para la keymap
configuración. He intentado configurar estas diferentes opciones y parecen no tener ningún efecto más allá de lo que set editing-mode vi
hace.
Probablemente la forma más sucinta de responder a esta pregunta es dar un ejemplo de cómo los cambios keymap
marcan la diferencia.
Cita de la página de manual:
keymap (emacs)
Set the current readline keymap. The set of legal keymap names
is emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move,
vi-command, and vi-insert. vi is equivalent to vi-command;
<<snip>>
vi-command
ovi
... mira mi respuesta como prueba :)Respuestas:
Son los diferentes mapas de teclas dentro del modo vi. Por ejemplo, mis
.inputrc
conjuntoskeymap
para vincular teclas en diferentes modos. Extracto:fuente
TL; DR
Si quieres la esencia, salta al encabezado
editing-mode vi
(el último).¡Pero espera! Sin embargo, es posible que se necesite bastante información de fondo: por ejemplo, la diferencia entre an
editing-mode
y akeymap
.Particularmente útil es el concepto de un
emacs
mapa de teclas híbrido para insertar texto y al mismo tiempo acceder fácilmentevi-command
para realizar cambios.¿Cuál es la diferencia entre an
editing-mode
y akeymap
?Hay solamente dos
editing-mode
s:emacs
(por defecto) yvi
.La documentación de GNU Readline Library dice:
Tenga en cuenta la diferencia entre
editing-mode
ykeymap
: enediting-mode vi
los dos (sí, solo hay dos, siga leyendo) los mapas de teclas se intercambian para emular los diferentes modos delvi
editor. TODOS losemacs
que operan al mismo tiempo enediting-mode emacs
(explicado más adelante).Entonces, ¿qué hace
editing-mode
realmente? Simplemente establece el mapa de teclas activo al iniciar el shell enemacs
ovi-insert
.¿Cuáles son los mapas de teclas únicos?
Si bien no está documentado,
vi
/vi-command
y losvi-move
mapas de teclas también son equivalentes:Esto nos deja con:
emacs
,emacs-meta
,emacs-ctlx
,vi
, yvi-insert
como mapas de teclas exclusivas para explicar. Probablemente lo mejor sea diferenciar los mapas de teclas inspeccionándolos ...¿Cuáles son los enlaces predeterminados de los mapas de teclado?
Para ver las combinaciones de teclas predeterminadas para (por ejemplo) emacs (el predeterminado), use:
Puede reemplazarlo
emacs
con cualquier otro nombre de mapa de teclas en el ejemplo anterior.Hay muchas líneas que dicen
self-insert
odo-lowercase-version
que no son muy útiles, así que para eliminarlas:¿Cuál es la diferencia entre los distintos
emacs
mapas de teclas?TL; DR: son vistas diferentes en un solo conjunto de asignaciones aplicadas
editing-mode emacs
.Si la salida del segundo comando en los archivos de llamada
emacs-standard
,emacs-meta
,emacs-ctlx
,vi-command
, yvi-insert
por sus correspondienteskeymap
s, se puede descubrir que:NO hay comandos asignados
emacs-meta
yemacs-ctlx
que tampoco aparecen enemacs-standard
:Entonces
emacs
/emacs-standard
es un superconjunto funcionalmente funcional de ambosemacs-ctlx
yemacs-meta
esto significa que:Es funcionalmente equivalente a:
Podría argumentar que la segunda forma es más fácil de leer.
Insertar texto:
emacs
vsvi-insert
Hay 28 comandos en
emacs-standard
no envi-insert
emacs
/emacs-standard
es básicamente un superconjunto devi-insert
. Por lo tanto, para escribir texto, es mejor usar elemacs-standard
mapa de teclasvi-insert
siempre que pueda cambiar fácilmente entreemacs
yvi-command
.Los únicos enlaces adicionales en
vi-insert
not inemacs-standard
son:Los primeros 3 de estos cuatro conflictos con los
emacs
enlaces:que resolví de la siguiente manera:
editing-mode vi
Como hemos visto más arriba,
vi
,vi-command
yvi-move
son uno y el mismo mapa de teclas:Tenga en cuenta que se trata de un total de solo dos mapas distintos que están asociados por defecto
editing-mode vi
.Cuando está en
editing-mode vi
, loskeymap
s en uso sonvi
/vi-command
/vi-move
yvi-insert
(el mapa de teclas inicial). Solo uno de estos dos mapas está activo a la vez.editing-mode vi
no hace nada más que establecer un mapa de teclas predeterminado cuando se inicia el shell, etiquetadovi-insert
. De nuevo, solo hay un mapa de teclas activo a la vez. Estevi-insert
mapa de teclas asigna la mayoría de las teclas deself-insert
modo que cuando presiona el botón de plástico en su teclado, el símbolo impreso aparece en su pantalla.El
vi-insert
mapa de teclas se permite cambiar al mapa de teclas manipulador de texto llamadovi-command
/vi
/vi-move
mediante elvi-movement-mode
comando, vinculado a la ESCtecla de forma predeterminada en elvi-insert
mapa de teclas .En realidad, incluso el
emacs
mapa de teclas puede activar elvi
mapa de teclas de manipulación de texto similar mediante elvi-movement-mode
comando, como en la solución híbrida mencionada anteriormente.O en un lenguaje más fácil ...
De forma predeterminada, presione ESCpara cambiar al
vi-command
mapa de teclas cuando elvi-insert
mapa de teclas esté activo.El
vi-command
mapa de teclas utiliza pulsaciones de teclas estándar, simples a, by cpara moverse e interactuar con el texto, al igual que elvi
modo predeterminado o de comando del editor. Generalmente no hay combinaciones Ctrl+ key. No puede insertar texto en este modo; las teclas de letras se asignan a comandos de edición / movimiento. Para escribir texto, cambie alvi-insert
mapa de teclas (ejemplo: presione ipara "Insertar").El ingreso de texto se realiza utilizando el
vi-insert
mapa de teclas, que está activo cuando se inicia el shell si tieneediting-mode vi
en su.inputrc
archivo. Cambie alvi-insert
mapa de teclas presionando i"insertar" mientras está envi-command
(o de muchas otras maneras para aquellos iniciados envi
).A menos que conozca el
vi
editor, es probable que encuentrevi-command
claves muy difíciles de usar al principio, pero si lo hace bien, puede editar el texto como un asistente de barba larga.fuente