Bash, como corrigir globalmente ^ H e ^? problemas de backspace

12

Gostaria de corrigir esse problema frequente em que o shell em um servidor remoto pensa que a chave de backspace do meu terminal é ^?e, às vezes, pensa que é ^H, e está incorreto e gera o caractere errado quando pressiono o backspace. Se eu definir para ^ H ou ^? com stty erase ^Hou stty erase ^?no meu arquivo .bashrc e usar outro terminal para acessar o servidor, ele geralmente acaba errado. Então, eu estou preso tendo que digitar manualmente stty erase [whatever]para corrigi-lo quando percebo que a tecla backspace está errada.

O que eu gostaria de fazer é vincular ambos ^?e ^Hpara retroceder, porque se eu posso fazer isso, eu posso apenas adicioná-la a todos os meus arquivos .bashrc, e certamente vai acabar este pesadelo. Isso é possível? Se sim, como?

Fragsworth
fonte

Respostas:

8

Esta página possui todas as informações que você precisará sobre esse problema; Eu sugiro que você leia. Agora, se você estiver usando bash, deve ser suficiente criar um ~/.inputrcarquivo contendo estas linhas:

"\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 um bônus adicional, eles farão Homee Endfuncionarão também.

Terdon
fonte
2

A maioria das informações em http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html é realmente o que você precisa. Uma correção para as informações é sua sugestão (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 ^? 

Embora isso faça com que o XTerm envie o caractere certo e mude stty para ter backspace como ^?, ele ainda reportará erroneamente ^Hcomo backspace em algumas ocasiões, quebrando, por exemplo, backspace no modo Vim instert (veja aqui: https://bugs.gentoo.org / 154090 ). Para evitar isso, use em VT100.backarrowKey: falsevez disso:

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

(veja também [insira o link aqui])

amosonn
fonte
Leia sobre "Por que preciso de 50 reputação para comentar" para garantir que você entenda como pode começar a comentar.
Pimp Juice IT
Não exigi nenhum esclarecimento de ninguém. Antes, eu estava fornecendo esclarecimentos e uma pequena correção para a resposta acima. Mas, se isso estiver bastante documentado em uma resposta, que assim seja. Eu adicionei o texto ao redor, tornando-o uma resposta completa.
amosonn
Além disso, esse link está ausente da minha resposta, mas não posso adicioná-lo lá. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn