11

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

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

2 ответа2

6

На этой странице есть вся информация, которая вам когда-либо понадобится по этому вопросу; Я предлагаю вам прочитать это. Теперь, если вы используете 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 работать.

1

Большая часть информации в 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 ^? 

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .