这是我的完成功能:
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"'
这是我的完成功能:
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"'
这与引号的使用无关。zsh 在您的第二种情况下不提供补ok
全,因为它与已为该参数输入的内容相去甚远。之后也不会提供完成c a
。
zsh 通常假设要完成的内容与已经输入的内容有些相关,从而使完成函数的作者无需检查匹配项。您可以将-U
选项添加到您的 compctl 命令,告诉它应该使用整个$reply
列表,即使是不匹配的条目。
我还应该注意 compctl 属于旧的 zsh 完成系统。zshcompsys 手册页中描述了新的补全系统