Estoy intentando que Bash imite el comportamiento de KornShell93 (ksh
) cuando los shells están en el modo de edición de línea de comandos Vi.
KornShell por defecto es «Vi modo normal» (también conocido como modo «comando») y también coloca el cursor al comienzo de la línea de comando cuando retrocede en el historial de la línea de comando. Esto contrasta con Bash, que lo coloca en «Vi insert mode «y al final de la línea de comando.
En las respuestas a» Bash la configuración del modo vi a la configuración predeterminada del modo de comando » , prácticamente concluyó que no hay forma de que Bash tenga el «modo normal Vi» predeterminado cuando la edición de la línea de comandos Vi está habilitada.
Esto fue más de cinco años s hace ahora, y me pregunto si esto ha cambiado desde entonces.
¿Y qué hay de colocar automáticamente el cursor al comienzo de la línea de comando? ¿Hay algo de magia Readline desconocida para mí que pueda ayudarme con esto?
Estoy usando Bash versión 4.4.5 (1) -release compilado desde el código fuente (OpenBSD shells/bash
puerto) en OpenBSD-current (enero de 2017).
Comentarios
- Como punto de datos, Zsh se comporta como Bash ^ H ^ H ^ H ^ HReadline, no como ksh. (El comportamiento de Bash ' no es ' realmente Bash ' s, es ' s Readline ' s, que utiliza Bash.)
Respuesta
Parece que no hay una forma adecuada de insertar una Esc en la línea de comando.
Mientras está en vi-insert
se utilizan la mayoría de alpha/numeric
. Esc está bastante lejos y cualquier acorde (como Alt-j
( que funciona)) parecen más complejas de lo deseado. Por lo tanto, hay una manera de hacer que dos se conviertan en una configuración cadena rable.
La solución alternativa funciona usando la idea de Esta respuesta
Solo agregue esto a .inputrc
:
set editing-mode vi set vi-ins-mode-string \1\e[6 q\2 set vi-cmd-mode-string \1\e[2 q\2 set keymap emacs "\ee": vi-editing-mode "jk": "\eejk" "kj": "\eejk" set keymap vi-insert "\ee": emacs-editing-mode "jk": vi-movement-mode "kj": vi-movement-mode set keymap vi-command "\ee": emacs-editing-mode
Por eso, no importa por dónde empiece: emacs
o vi
, presionar ambos jk
lo colocará en el modo de comando vi en el inicio de la línea .
Además, le permite cambiar al modo emacs
con Esc – e .
Comentarios
- Puedo ' ¡Vota esto lo suficiente! Me deshice de las cosas de emacs y solo necesito el acceso directo " jk ", no ' t necesito " kj ", así que simplemente tengo:
set editing-mode vi
set vi-ins-mode-string \1\e[6 q\2
set vi-cmd-mode-string \1\e[2 q\2
set keymap vi-insert
"jk": vi-movement-mode
y ahora soy feliz!