我想从用户那里读取一个字符串(使用read
内置命令或类似的命令),并启用所有正常shell使用的自动补全功能。换句话说,我希望ZSH完成所有命令,但在按下ENTER键后,不要执行命令,而是将字符串传递给我的脚本。我该如何实现这一点?
vared
内建命令。请注意,保留HTML标记。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
_complete
设置为别名,则此操作将失败。您将看到以下输出:defining function based on alias \
_complete' parse error near `()'。在
_complete() {函数定义之前添加
function` 关键字即可解决问题。有关更多信息,请参见此问题:https://github.com/zsh-users/zsh-autosuggestions/issues/442 - Eric Freese