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