Для удобного ввода строки текста в zsh используйте vared
. Использование vared
вместо read
вызывает zle, что эквивалентно передаче -e
в bash для вызова readline.
vared -p 'What would you like to do?: ' -c tmp
Поведение, которое вы описываете с обычным read
похоже на неправильно настроенный терминал, а не на проблему с оболочкой. Запустите stty -a
чтобы показать настройки терминала, и убедитесь, что для eol
установлено значение ^M
а для erase
установлено значение, отправляемое клавишей Backspace . В зависимости от операционной системы и того, как она настроена и на терминале, Backspace отправляет либо ^H
либо ^?
, Настройка backspace обычно происходит неправильно из-за некоторого файла конфигурации, который пытается установить его вручную, поэтому первое, что вы должны сделать, это отследить и удалить любую такую неправильную конфигурацию. Если вы ничего не нашли, просмотрите настройки вашего эмулятора терминала, чтобы убедиться, что он не установлен в какой-либо исторический режим совместимости. Если ничего не помогает , добавьте что-то вроде этого в ваш ~/.zshrc
:
if [[ $(ps -o comm= $PPID) = iterm ]]; then
stty erase '^?'
fi