Zsh自定义Widget中read命令未等待输入直接返回的解决办法
Zsh Widget中read命令不等待输入的修复方案
在Zsh的自定义Widget环境中,直接使用read命令无法获取终端交互输入——因为Zle(Zsh Line Editor)上下文里,默认read会从Zle内部输入缓冲区读取数据,而非终端,所以会直接返回空值。
以下是两种可行的修复方式:
方式一:使用vared命令
vared是Zsh内置命令,专门用于交互式编辑变量值,能在Widget中正常获取用户输入:
zle -N replace-command-buffer bindkey '\eg' replace-command-buffer replace-command-buffer() { local input # 显示提示信息到终端 zle -R "Enter a string: " # 交互式读取输入到input变量 vared input BUFFER="$input" zle reset-prompt }
方式二:使用read -E选项
read的-E参数会强制使用Zle的编辑界面读取输入,适配Widget环境:
zle -N replace-command-buffer bindkey '\eg' replace-command-buffer replace-command-buffer() { local input # 将提示信息输出到标准错误(避免干扰命令缓冲区) echo "Enter a string: " >&2 # 使用Zle编辑模式读取输入 read -E input BUFFER="$input" zle reset-prompt }
内容的提问来源于stack exchange,提问作者Poma
相关产品推荐
相关产品推荐

