Bash, jak globalnie naprawić ^ H i ^? problemy z backspace

12

Chciałbym rozwiązać ten częsty problem, w którym powłoka na zdalnym serwerze uważa, że ​​klucz backspace mojego terminala jest, ^?a czasami ^Htak się dzieje, i okazuje się, że jest niepoprawny i wyświetla zły znak po naciśnięciu backspace. Jeśli ustawię go na ^ H lub ^? z stty erase ^Hlub stty erase ^?w moim pliku .bashrc i użyj innego terminala, aby uzyskać dostęp do serwera, często kończy się to błędem. Więc utknąłem z konieczności ręcznego pisania, stty erase [whatever]aby to naprawić, gdy zauważę, że klawisz Backspace jest nieprawidłowy.

Co chciałbym zrobić, to wiążą się zarówno ^?i ^Hdo Backspace, ponieważ jeśli mogę to zrobić, mogę tylko dodać go do wszystkich moich plików .bashrc, i będzie to na pewno zakończyć ten koszmar. czy to możliwe? Jeśli tak to jak?

fragsworth
źródło

Odpowiedzi:

8

Ta strona zawiera wszystkie informacje, których będziesz potrzebować w tej sprawie; Sugeruję, żebyś to przeczytał. Teraz, jeśli używasz bash, wystarczy utworzyć ~/.inputrcplik zawierający te linie:

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

Jako dodatkowy bonus, będą również tworzyć Homei Enddziałać.

terdon
źródło
2

Większość informacji w http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html jest rzeczywiście tym, czego potrzebujesz. Jedna poprawka do informacji dotyczy ich sugestii (dla 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 ^? 

Mimo że XTerm wyśle ​​odpowiednią postać i zmieni stty, aby mieć backspace as ^?, ^Hw niektórych przypadkach nadal będzie błędnie zgłaszać jako backspace, przerywając np. Backspace w trybie Vim instert (patrz tutaj: https://bugs.gentoo.org / 154090 ). Aby tego uniknąć, użyj VT100.backarrowKey: falsezamiast tego, więc:

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

(patrz także [proszę wstawić link tutaj])

amosonn
źródło
Przeczytaj „Dlaczego potrzebuję 50 reputacji, aby móc komentować”, aby upewnić się, że możesz zacząć komentować.
Pimp Juice IT
Nie wymagałem od nikogo żadnych wyjaśnień. Zamiast tego przedstawiłem wyjaśnienie i drobną korektę do powyższej odpowiedzi. Ale jeśli jest to raczej udokumentowane w odpowiedzi, niech tak będzie. Dodałem cały tekst, dzięki czemu jest to pełna odpowiedź.
amosonn
Poza tym tego linku brakuje w mojej odpowiedzi, ale nie mogę go tam dodać. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn