在 zsh 中读取一行用户输入的更好方法?(例如使用 zle?)

在 zsh 中读取一行用户输入的更好方法?(例如使用 zle?)

由于某种原因, Zshread会回显^M's 而不是将其作为<Enter>按键接受。(如果-d设置了 ,则它们会被识别为<Enter>'s ,但仍会回显。)它也不支持退格键等基本功能。

我可以通过黑客攻击/运行来解决这个问题bash

> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a                                                                
eat cake

但我想知道是否有更清洁的方法。

答案1

要在 zsh 下舒适地输入一行文本,请使用vared. 使用vared而不是read调用,这相当于传入-ebash 来调用 readline。

vared -p 'What would you like to do?: ' -c tmp

您用 plain 描述的行为read看起来像是终端配置错误,而不是 shell 问题。运行stty -a以显示您的终端设置,并确保设置eol^M并且erase设置为您的Backspace键发送的内容。根据操作系统及其设置方式以及终端,Backspace发送^H^?。退格设置通常会因为某些配置文件试图手动设置而出错,因此您应该做的第一件事就是跟踪并删除任何此类错误配置。如果找不到,请检查终端仿真器的设置以检查它是否未设置为某些历史兼容模式。如果其他所有方法都失败,请在您的中添加类似这样的内容~/.zshrc

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi

相关内容