我想从用户读取一个字符串(使用read
内置或类似的东西),所有完成都启用了正常的shell使用。换句话说,我希望ZSH完成所有命令,但在按ENTER后我不希望ZSH执行命令,而是将字符串传递给我的脚本。我怎样才能做到这一点?
答案 0 :(得分:4)
要阅读包含版本和完成版的专线,请拨打vared
builtin。
foo='default text'
vared foo
完成将像在参数分配的值部分一样工作(因为这是vared
所做的)。如果你想像普通的命令行一样完成,我认为你需要摆弄_complete
,让它忘记在vared
内。
zmodload zsh/parameter
autoload +X _complete
functions[_original_complete]=$functions[_complete]
_complete () {
unset 'compstate[vared]'
_original_complete "$@"
}
foo='default text'
vared foo