Enlaces de teclas personalizados para el modo vi shell, es decir, "set -o vi"?

18

Acabo de descubrir las maravillas de set -o vi, y tengo curiosidad por saber si es posible personalizar este modo de shell vi de alguna de las mismas formas en que puede personalizar vi o vim.

Por ejemplo, cree una combinación de teclas personalizada para asignar una combinación de teclas o teclas más conveniente esc?

Si no se admite actualmente, ¿qué tan difícil sería alterar el código fuente del programa y el código duro en algunas personalizaciones, o sería una mala idea?

Jonás
fuente
Encontré la respuesta aquí < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

Respuestas:

17

Sí, puede cambiar las asignaciones de teclas (para el modo similar a vi- o emacs) con el bindincorporado. Esta es en realidad una función de línea de lectura (por lo que puede tener enlaces vi-like en todos los programas de línea de lectura, no solo bash).

Se llama a la clave que está buscando vi-movement-modey su valor predeterminado es \e(escape). Además, puede vincularlo (y esto es bastante tonto) igual a esto. La segunda línea elimina el enlace para escapar:

$ bind "=":vi-movement-mode 
$ bind -r "\e"

La ejecución bind -ple mostrará todas las claves que puede vincular y sus vinculaciones actuales (si las hay).

Puede poner bindcomandos en su .bashrc, o puede editar ~/.inputrcpara que se aplique a todos los programas de línea de lectura que ejecuta. Los documentos de readline contienen detalles completos.

derobert
fuente
1
Esto es asombroso Muchas gracias. Pude descubrir cómo vincular combinaciones de teclas como bind "Control-Space":vi-movement-mode, eso funciona bien. Pero, por ejemplo, en vim, escribo dos caracteres seguidos como disparador esc, es decir, si escribe jj, volverá al modo normal. Esto no funcionó cuando lo probé con bind, ¿hay alguna forma especial de hacerlo funcionar?
Jonás
@Jonah no es que sepa de la mano, pero no he leído los documentos de readline recientemente ...
derobert
@chishaku, debe anteponer el nombre de Jonah con un signo at ( @), o no recibirá una notificación.
derobert
2
@ Jonás, acabo de intentar hacer lo mismo. ¿Alguna vez resolviste esto?
chishaku
1
unix.stackexchange.com/questions/303282/… Necesita cotizaciones por alguna razónbind '"jk":vi-movement-mode'
Hielke Walinga