Для удобного ввода строки текста под 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
отлично работает здесь.