我想从用户那里读取一个字符串(使用read内置或类似的东西),并为正常的 shell 使用启用所有补全。换句话说,我希望 ZSH 完成所有命令,但按 ENTER 后我不希望 ZSH 执行该命令,而是将字符串传递给我的脚本。我怎样才能实现这个目标?
要读取包含版本和完成的行,请调用vared内置.
foo='default text'
vared foo
Run Code Online (Sandbox Code Playgroud)
完成将像您处于参数分配的值部分一样工作(因为这就是所做的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
Run Code Online (Sandbox Code Playgroud)