Para inserir uma linha de texto confortavelmente em zsh, use vared
. Usar vared
em vez de read
invoca zle , que é o equivalente a passar -e
no bash para invocar readline.
vared -p 'What would you like to do?: ' -c tmp
O comportamento que você descreve com read
simples parece um terminal configurado incorretamente, em vez de um problema de shell. Execute stty -a
para mostrar suas configurações de terminal e certifique-se de que eol
esteja definido como ^M
e erase
esteja definido com o que sua chave Backspace envia. Dependendo do sistema operacional e de como ele está configurado e no terminal, Backspace envia ^H
ou ^?
. A configuração de backspace geralmente dá errado por causa de algum arquivo de configuração que tenta configurá-lo manualmente, então a primeira coisa que você deve fazer é rastrear e remover qualquer configuração incorreta. Se você não encontrar nenhum, revise as configurações do emulador de terminal para verificar se ele não está definido em algum modo de compatibilidade histórica. Se tudo mais falhar, adicione algo assim ao seu ~/.zshrc
:
if [[ $(ps -o comm= $PPID) = iterm ]]; then
stty erase '^?'
fi