3

В моей работе есть сервер, который использует csh в качестве оболочки по умолчанию. Я предпочитаю bash, поэтому при каждом входе в систему я запускаю bash .

Но по какой-то причине кнопка возврата удаляет полные слова, а не просто символы. Это почему? Как я могу изменить это и получить Bksp удалить символ за символом ??

К вашему сведению, Shift+Bksp удаляет символ за символом. Если возможно, я бы хотел, чтобы Shift+Bksp удаляли слово за словом. Только если возможно.

Спасибо

PS: Пожалуйста, не говорите мне, чтобы держать клавишу Shift; это прямо раздражает.

1 ответ1

3

Некоторые терминалы отправляют ^h (символ номер 8) для клавиши BackSpace , а некоторые отправляют ^? (персонаж № 127). Можно настроить многие эмуляторы терминала, и большинство программ можно настроить, чтобы знать, какой ключ ожидать. Очевидно, что обе стороны должны согласиться.

Stty - это способ, которым приложения могут запрашивать конфигурацию терминала. erase = ^? означает, что ваш файл описания терминала на сервере утверждает, что когда ваш терминал отправляет ^? , это означает «стереть предыдущий символ». werase = ^? значит что ^? означает «стереть предыдущее слово». Есть противоречие между этими двумя настройками.

Когда вы входите через ssh, клиент ssh отправляет имя для терминала, которое помещается в переменную окружения TERM . Программы на сервере затем ищут описания терминала в базе данных (называемой termcap или terminfo). Если эти описания нарушены или файл конфигурации (например, /etc/profile или ~/.login или ~/.bashrc) заменяет описания неверными данными, вы можете обнаружить несоответствие. Например, один из возможных источников вашей проблемы - если какой-нибудь файл инициализации содержит команду stty werase '^?' (заставляя ^? иметь в виду слово стереть) пока ваш терминал отправляет ^? для клавиши возврата.

В идеале, вы должны исправить конфликт, так как многие программы будут читать эту информацию.

В Putty вы можете настроить, какой из ^? или ^h отправляет ключ BackSpace . Проверьте значение этого параметра. Возможно, самый простой способ решить вашу проблему - это заставить Putty отправить ^h для BackSpace и убедиться, что сервер использует этот параметр (stty erase '^h' , который будет помещен в ~/.bashrc , принудительно вызовет его).

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