Hacer que el modo vi de Bash ' sea predeterminado en “ normal ” modo Vi (no “ insert ”) y coloca el cursor al principio de la línea, imitando a KornShell

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!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *