Zshread出于某种原因是 echo'ing ^M's 而不是接受它们作为<Enter>击键。(如果-d已设置,则它们被识别为<Enter>'s,但仍被回显。)它也不支持退格键等基本功能。
我可以通过hacking/run来解决这个问题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
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更清洁的方法。
Gil*_*il' 26
要在 zsh 下舒适地输入一行文本,请使用vared. 使用vared而不是read调用zle,这相当于传入-ebash 来调用 readline。
vared -p 'What would you like to do?: ' -c tmp
Run Code Online (Sandbox Code Playgroud)
您用普通描述的行为read看起来像是配置错误的终端而不是外壳问题。运行stty -a显示终端设置,并确保eol设置为^M和erase设置为你的什么Backspace键发送。根据操作系统及其设置方式以及在终端上,Backspace发送^H或^?. 退格设置通常会出错,因为某些配置文件试图手动设置它,因此您应该做的第一件事是跟踪并删除任何此类错误配置。如果没有找到,请检查终端仿真器的设置以检查它是否未设置为某种历史兼容模式。如果所有其他方法都失败了,请将类似的内容添加到您的~/.zshrc:
if [[ $(ps -o comm= $PPID) = iterm ]]; then
stty erase '^?'
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13876 次 |
| 最近记录: |