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?

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.


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í])


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.