La página de manual de readline (3) enumera estos cuatro (vi, vi-move, vi-command, vi-insert) como posibles opciones para la keymapconfiguración. He intentado configurar estas diferentes opciones y parecen no tener ningún efecto más allá de lo que set editing-mode vihace.
Probablemente la forma más sucinta de responder a esta pregunta es dar un ejemplo de cómo los cambios keymapmarcan 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-commandovi... mira mi respuesta como prueba :)Respuestas:
Son los diferentes mapas de teclas dentro del modo vi. Por ejemplo, mis
.inputrcconjuntoskeymappara 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-modey akeymap.Particularmente útil es el concepto de un
emacsmapa de teclas híbrido para insertar texto y al mismo tiempo acceder fácilmentevi-commandpara realizar cambios.¿Cuál es la diferencia entre an
editing-modey akeymap?Hay solamente dos
editing-modes:emacs(por defecto) yvi.La documentación de GNU Readline Library dice:
Tenga en cuenta la diferencia entre
editing-modeykeymap: enediting-mode vilos dos (sí, solo hay dos, siga leyendo) los mapas de teclas se intercambian para emular los diferentes modos delvieditor. TODOS losemacsque operan al mismo tiempo enediting-mode emacs(explicado más adelante).Entonces, ¿qué hace
editing-moderealmente? Simplemente establece el mapa de teclas activo al iniciar el shell enemacsovi-insert.¿Cuáles son los mapas de teclas únicos?
Si bien no está documentado,
vi/vi-commandy losvi-movemapas de teclas también son equivalentes:Esto nos deja con:
emacs,emacs-meta,emacs-ctlx,vi, yvi-insertcomo 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
emacscon cualquier otro nombre de mapa de teclas en el ejemplo anterior.Hay muchas líneas que dicen
self-insertodo-lowercase-versionque no son muy útiles, así que para eliminarlas:¿Cuál es la diferencia entre los distintos
emacsmapas 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-insertpor sus correspondienteskeymaps, se puede descubrir que:NO hay comandos asignados
emacs-metayemacs-ctlxque tampoco aparecen enemacs-standard:Entonces
emacs/emacs-standardes un superconjunto funcionalmente funcional de ambosemacs-ctlxyemacs-metaesto significa que:Es funcionalmente equivalente a:
Podría argumentar que la segunda forma es más fácil de leer.
Insertar texto:
emacsvsvi-insertHay 28 comandos en
emacs-standardno envi-insertemacs/emacs-standardes básicamente un superconjunto devi-insert. Por lo tanto, para escribir texto, es mejor usar elemacs-standardmapa de teclasvi-insertsiempre que pueda cambiar fácilmente entreemacsyvi-command.Los únicos enlaces adicionales en
vi-insertnot inemacs-standardson:Los primeros 3 de estos cuatro conflictos con los
emacsenlaces:que resolví de la siguiente manera:
editing-mode viComo hemos visto más arriba,
vi,vi-commandyvi-moveson 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, loskeymaps en uso sonvi/vi-command/vi-moveyvi-insert(el mapa de teclas inicial). Solo uno de estos dos mapas está activo a la vez.editing-mode vino 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-insertmapa de teclas asigna la mayoría de las teclas deself-insertmodo que cuando presiona el botón de plástico en su teclado, el símbolo impreso aparece en su pantalla.El
vi-insertmapa de teclas se permite cambiar al mapa de teclas manipulador de texto llamadovi-command/vi/vi-movemediante elvi-movement-modecomando, vinculado a la ESCtecla de forma predeterminada en elvi-insertmapa de teclas .En realidad, incluso el
emacsmapa de teclas puede activar elvimapa de teclas de manipulación de texto similar mediante elvi-movement-modecomando, 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-commandmapa de teclas cuando elvi-insertmapa de teclas esté activo.El
vi-commandmapa de teclas utiliza pulsaciones de teclas estándar, simples a, by cpara moverse e interactuar con el texto, al igual que elvimodo 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-insertmapa de teclas (ejemplo: presione ipara "Insertar").El ingreso de texto se realiza utilizando el
vi-insertmapa de teclas, que está activo cuando se inicia el shell si tieneediting-mode vien su.inputrcarchivo. Cambie alvi-insertmapa de teclas presionando i"insertar" mientras está envi-command(o de muchas otras maneras para aquellos iniciados envi).A menos que conozca el
vieditor, es probable que encuentrevi-commandclaves muy difíciles de usar al principio, pero si lo hace bien, puede editar el texto como un asistente de barba larga.fuente