0

这是我的完成功能:

f()
{    
    reply=('ok')
}
compctl -K f c

然后我做

c

tab

c ok

有什么作用。然后我做tab之后b

c ok "a b"

什么也没有发生。我希望a b被替换为ok(就像在 bash 中一样)。

我怎样才能实现它?

我真的需要在引号内完成。我的程序的典型启动如下所示:c 'a, &b, c[d]' 'a < 1 and b == "2013"'

4

1 回答 1

0

这与引号的使用无关。zsh 在您的第二种情况下不提供补ok全,因为它与已为该参数输入的内容相去甚远。之后也不会提供完成c a

zsh 通常假设要完成的内容与已经输入的内容有些相关,从而使完成函数的作者无需检查匹配项。您可以将-U选项添加到您的 compctl 命令,告诉它应该使用整个$reply列表,即使是不匹配的条目。

我还应该注意 compctl 属于旧的 zsh 完成系统。zshcompsys 手册页中描述了新的补全系统

于 2013-08-08T12:48:36.487 回答