Bash, як глобально виправити ^ H і ^? проблеми із зворотним простором


12

Я хотів би виправити цю часту проблему, коли оболонка на віддаленому сервері вважає, що клавіша в зворотному просторі мого термінала є, ^?а іноді здається, що вона є ^Hнеправильною і видає неправильний символ, коли я натискаю на простір. Якщо я встановив його на ^ H чи ^? з stty erase ^Hабо stty erase ^?в моєму файлі .bashrc, і використовувати інший термінал для доступу до сервера, він часто закінчується неправильно. Тому я застряг, що потрібно вводити stty erase [whatever]його вручну, щоб виправити це, коли помічаю, що клавіша зворотної області не є.

Що я хотів би зробити, це прив’язати ^?і ^Hназад, і тому, що якщо я можу це зробити, я можу просто додати його до всіх своїх файлів .bashrc, і це, безумовно, закінчиться цим кошмаром. Чи можливо це? Якщо так, то як?

Відповіді:


8

На цій сторінці є вся інформація, яка вам коли-небудь знадобиться з цього питання; Я пропоную вам прочитати його. Тепер, якщо ви використовуєте bash, має бути достатньо створити ~/.inputrcфайл, що містить ці рядки:

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

Як додатковий бонус, вони також зароблять Homeі Endпрацюватимуть.


2

Більшість інформації на http://web.archive.org/web/20120621035133/http://www.ibb.net/~anne/keyboard/keyboard.html - це справді те, що вам потрібно. Одне виправлення інформації - це їх пропозиція (для 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 ^? 

Хоча це дозволить XTerm надіслати потрібний символ і змінити stty, щоб він мав backspace ^?, він все одно помилково звітуватиме ^Hяк backspace в деяких випадках, порушуючи тобто backspace у режимі Vim instert (див. Тут: https://bugs.gentoo.org / 154090 ). Щоб уникнути цього, використовуйте VT100.backarrowKey: falseнатомість так:

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

(див. також [будь-ласка, вставте посилання тут])


Прочитайте "Чому мені потрібно коментувати 50 репутацій", щоб зрозуміти, як можна починати коментувати.
Pimp Juice IT

Я не вимагав від когось пояснень. Швидше, я давав роз'яснення та незначну корекцію вищезазначеної відповіді. Але, якщо це досить задокументовано у відповіді, так і нехай буде. Я додав текст навколо, що робить його повною відповіддю.
amosonn

Також у цій відповіді відсутнє посилання, але я не можу його додати там. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.