Баш, как глобально исправить ^ H и ^? проблемы возврата

12

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

То, что я хотел бы сделать, это связать оба ^?и ^Hbackspace, потому что, если я смогу сделать это, я могу просто добавить его ко всем моим файлам .bashrc, и это, безусловно, положит конец этому кошмару. Это возможно? Если так, то как?

fragsworth
источник

Ответы:

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работать так же.

terdon
источник
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 ^? 

(см. также [пожалуйста, вставьте ссылку здесь])

amosonn
источник
Прочтите «Почему мне нужно 50 репутации, чтобы комментировать», чтобы понять, как вы можете начать комментировать.
Сок Pimp IT
Я не требовал никаких разъяснений от кого-либо. Скорее, я давал разъяснения и небольшие исправления в ответе выше. Но, если это довольно задокументировано в ответе, пусть будет так. Я добавил текст, чтобы он был полным ответом.
amosonn
Кроме того, эта ссылка отсутствует в моем ответе, но я не могу добавить ее туда. wiki.archlinux.org/index.php/Xterm#Fix_the_backspace_key
amosonn