使用 Bashtput cup 0 0; read -e -p "Enter input: " userinput
可以很好地获取一行用户输入:
- 它不会清除提示下方的屏幕
- 它允许用户使用箭头键转到行的中间并编辑他们在键入时可能犯的错误
在 zsh 中如何实现这一点?我尝试过两种技术;它要么清除提示下方的屏幕,要么不允许使用箭头返回到行中间进行编辑。
- 使用
vared
:
tput cup 0 0; userinput=""; vared -p "Enter input: " userinput
vared
似乎清除了提示下方的屏幕,因此这会在显示提示之前清除整个屏幕。
- 使用
read
:
tput cup 0 0; printf "Enter input: "; read -r userinput
这不会清除提示下方的屏幕,但不允许使用箭头键转到行的中间并进行编辑(“删除”键有效,但要求用户删除并重新输入从该点开始的所有内容)的打字错误)。
有出路吗?也许可以欺骗 vared 相信下面没有行,因此它只清除 1 行(提示行)。如果在 zsh 中不可能,我愿意采用外部 POSIX 方式在屏幕第一行获取用户输入。