Bash, ¿cómo arreglar globalmente ^ H y ^? problemas de retroceso

12

Me gustaría solucionar este problema frecuente en el que el shell en un servidor remoto cree que la tecla de retroceso de mi terminal es ^?y, a veces, piensa que es ^Hy resulta incorrecta y muestra el carácter incorrecto cuando presiono la tecla de retroceso. Si lo configuro en ^ H o ^? con stty erase ^Ho stty erase ^?en mi archivo .bashrc, y utilizo alguna otra terminal para acceder al servidor, a menudo termina mal. Así que estoy atascado teniendo que escribir manualmente stty erase [whatever]para arreglarlo cuando noto que la tecla de retroceso está mal.

Lo que me gustaría hacer es vincular ambos ^?y ^Hretroceder, porque si puedo hacer esto, puedo agregarlo a todos mis archivos .bashrc, y ciertamente terminará con esta pesadilla. es posible? ¿Si es así, cómo?

Fragsworth
fuente

Respuestas:

8

Esta página tiene toda la información que necesitará sobre este tema; Te sugiero que lo leas. Ahora, si está utilizando bash, debería ser suficiente para crear un ~/.inputrcarchivo que contenga estas líneas:

"\e[3~": delete-char
# this is actually equivalent to "\C-?": delete-char
# VT
"\e[1~": beginning-of-line
"\e[4~": end-of-line
# kvt
"\e[H":beginning-of-line
"\e[F":end-of-line
# rxvt and konsole (i.e. the KDE-app...)
"\e[7~":beginning-of-line
"\e[8~":end-of-line

Como una ventaja adicional, harán Homey Endfuncionarán también.

terdon
fuente
2

La mayor parte de la información en http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html es de hecho lo que necesita. Una corrección de la información es su sugerencia (para XTerm):

*VT100.Translations: #override \
          <Key>BackSpace: string(0x7F)\n\
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

Si bien esto hará que XTerm envíe el carácter correcto y cambie stty para que tenga un espacio de retroceso como ^?, todavía informará erróneamente ^Hcomo espacio de retroceso en algunas ocasiones, rompiendo, por ejemplo, el espacio de retroceso en el modo de inserción Vim (ver aquí: https://bugs.gentoo.org / 154090 ). Para evitar esto, use VT100.backarrowKey: falseen su lugar, entonces:

*VT100.backarrowKey: false
*VT100.Translations: #override \
          <Key>Delete:    string("\033[3~")\n\
          <Key>Home:      string("\033[1~")\n\
          <Key>End:       string("\033[4~")
*ttyModes: erase ^? 

(vea también [inserte el enlace aquí])

amosonn
fuente
Lea "¿Por qué necesito 50 reputación para comentar?" Para asegurarse de que comprende cómo puede comenzar a comentar.
Pimp Juice IT
No exigí ninguna aclaración de nadie. Más bien, estaba proporcionando una aclaración y una corrección menor a la respuesta anterior. Pero, si esto está bastante documentado en una respuesta, que así sea. Agregué el texto alrededor para que sea una respuesta completa.
amosonn
Además, falta mi enlace en mi respuesta, pero no puedo agregarlo allí. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn