使用ZSH自动补全读取字符串

5

我想从用户那里读取一个字符串(使用read内置命令或类似的命令),并启用所有正常shell使用的自动补全功能。换句话说,我希望ZSH完成所有命令,但在按下ENTER键后,不要执行命令,而是将字符串传递给我的脚本。我该如何实现这一点?

1个回答

6
要读取具有版本和完成的行,请调用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接