Estoy usando el ksh
predeterminado en OpenBSD 6.2 (basado en pdksh
) con el modo de edición de línea de comando Vi habilitado.
Estoy tratando de hacer que las teclas de flecha funcionen correctamente como complemento de h , l , j y k (ya que estoy en un teclado Dvorak). Por lo que puedo decir, no funcionan en absoluto. No importa si estoy en modo "entrada" o "comando".
Las combinaciones de teclas actuales incluyen:
^[[A = up-history
^[[B = down-history
^[[C = forward-char
^[[D = backward-char
Estos son también los caracteres secuenciados producidos por mis teclas de flecha si uso Ctrl+V Tecla de flecha .
Las teclas de flecha funcionan como se esperaba en el modo de edición de línea de comandos de Emacs, pero como usuario de Vi desde hace mucho tiempo, me siento un poco lisiado cuando lo uso.
Mi sensación es que el Escape que se envía con la tecla de flecha se interpreta como si hubiera presionado Esc … Obtengo el comportamiento equivalente al escribir manualmente, p. Esc [ A como cuando presiono flecha arriba (me coloca en modo de comando y luego en modo de inserción al final de la línea).
Pregunta:¿Alguien ha podido hacer que las teclas de flecha funcionen de manera intuitiva en modo Vi en ksh
de OpenBSD? ?
Respuesta aceptada:
Hice una incursión rápida en /usr/src/bin/ksh
en mi sistema OpenBSD, ya que tenía las fuentes reales verificadas de todos modos. Eché un vistazo superficial a c_ksh.c
, emacs.c
y vi.c
y parece que el modo Vi se adaptó a pdksh
de nsh
en algún momento (alrededor de 1989/1990). Las palabras exactas utilizadas son
/* $OpenBSD: vi.c,v 1.55 2018/01/16 22:52:32 jca Exp $ */
/*
* vi command editing
* written by John Rochester (initially for nsh)
* bludgeoned to fit pdksh by Larry Bouzane, Jeff Sparkes & Eric Gisin
*
*/
El bind
Todas las funciones disponibles viven en emacs.c
, al igual que x_bind()
función que es llamada por bind
integrado, mientras que vi.c
parece tener su propia implementación de algunos de ellos bajo diferentes nombres que no son llamados desde x_bind()
.
Por lo tanto, creo que puedo concluir que bind
builtin no funciona en modo Vi en este shell en particular.
ACTUALIZACIÓN (2018-02-04):después de informar esto a openbsd-misc
list, se confirmó que bind
de hecho, no hace nada en el modo de edición de línea de comandos de Vi. Se introducirá un parche para modificar el ksh
manual sobre OpenBSD para que se mencione esto:
bind string=[editing-command] ...
En modo de edición de Emacs , el comando de edición especificado está vinculado a
la string
dada . Entrada futura de la string
hará que el comando de edición
se invoque inmediatamente. Los enlaces no tienen
efecto en el modo de edición Vi .