Bash backspace удаляет по одному слову за раз

Bash backspace удаляет по одному слову за раз

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

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

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

Спасибо

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

решение1

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

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

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

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

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

Связанный контент