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

9

Eu gostaria de corrigir esse problema freqüente em que o shell em um servidor remoto acha que a tecla de backspace do meu terminal é ^? e algumas vezes ele acha que é ^H , e está incorreto e emite o caracter errado quando eu pressione backspace. Se eu configurá-lo para ^ H ou ^? com stty erase ^H ou stty erase ^? no meu arquivo .bashrc, e usa algum outro terminal para acessar o servidor, muitas vezes acaba errado. Então, eu estou preso a ter que digitar manualmente stty erase [whatever] para consertá-lo quando eu notar que a tecla backspace está errada.

O que eu gostaria de fazer é ligar ambos ^? e ^H ao backspace, porque se eu puder fazer isso, eu posso simplesmente adicioná-lo a todos os meus arquivos .bashrc, e ele certamente acabará com esse pesadelo . Isso é possível? Se sim, como?

    
por fragsworth 05.09.2013 / 00:28

2 respostas

4

Esta página tem tudo as informações que você precisará sobre esse assunto; Eu sugiro que você leia. Agora, se você estiver usando bash , deve ser suficiente criar um arquivo ~/.inputrc 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 com que Home e End funcionem também.

    
por 05.09.2013 / 01:46
1

A maioria das informações no link é de fato o que você precisa. Uma correção para a informação, é da sua sugestão (para o XTerm):

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

Enquanto isso fará com que o XTerm envie o caractere correto, e altere o stty para ter backspace como ^? , ele ainda reportará erroneamente ^H como backspace em algumas ocasiões, quebrando o backspace no modo Vim instert (veja aqui: link . Para evitar isso, use VT100.backarrowKey: false , então:

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

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

    
por 16.10.2017 / 15:12