Bash, come risolvere globalmente ^ H e ^? problemi di backspace


12

Vorrei risolvere questo frequente problema in cui la shell su un server remoto pensa che la chiave di backspace del mio terminale sia ^?e a volte pensa che sia ^H, e sembra essere errata e restituisce il carattere sbagliato quando premo backspace. Se lo imposto su ^ H o ^? con stty erase ^Ho stty erase ^?nel mio file .bashrc e utilizzare qualche altro terminale per accedere al server, spesso finisce male. Quindi sono bloccato dover digitare manualmente stty erase [whatever]per risolverlo quando noto che il tasto backspace è sbagliato.

Quello che mi piacerebbe fare è associare entrambi ^?e ^Hal backspace, perché se posso farlo, posso semplicemente aggiungerlo a tutti i miei file .bashrc, e sicuramente finirà questo incubo. È possibile? Se é cosi, come?

Risposte:


8

Questa pagina contiene tutte le informazioni di cui avrai mai bisogno su questo problema; Ti suggerisco di leggerlo. Ora, se stai usando bash, dovrebbe essere sufficiente creare un ~/.inputrcfile contenente queste righe:

"\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

Come bonus aggiuntivo, faranno Homee Endfunzioneranno pure.


2

La maggior parte delle informazioni in http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html è effettivamente ciò di cui hai bisogno. Una correzione alle informazioni è il loro suggerimento (per 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 ^? 

Mentre questo farà in modo che XTerm invii il personaggio giusto e cambi stty per avere backspace come ^?, ^Hin alcune occasioni verrà comunque erroneamente riportato come backspace, interrompendo cioè backspace in modalità Vim instert (vedi qui: https://bugs.gentoo.org / 154090 ). Per evitare ciò, utilizzare VT100.backarrowKey: falseinvece, quindi:

*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 ^? 

(vedi anche [inserire il link qui])


Leggi "Perché ho bisogno di 50 reputazione per commentare" per assicurarti di capire come puoi iniziare a commentare.
Pimp Juice IT

Non ho richiesto alcun chiarimento da nessuno. Piuttosto, stavo fornendo chiarimenti e una correzione minore alla risposta di cui sopra. Ma se questo è piuttosto documentato in una risposta, così sia. Ho aggiunto il testo intorno rendendolo una risposta completa.
amosonn,

Inoltre, questo link manca nella mia risposta, ma non posso aggiungerlo lì. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.