Zsh 完成脚本找到但未执行

Zsh 完成脚本找到但未执行

首先,我们假设我有:

alias foo='path/to/my/program'

在我的文件中.zshrc,然后我为其创建了一个完成脚本~/.oh-my-zsh/completions/_foo,在文件中我有:

#compdef foo

_foo() {
    echo "hello"
}

_foo

所以,我期望当我foo [tab]从 shell 中输入时我会看到

$foo [tab]
hello

但我得到了

$ foo [tab]_foo

我按下 后,文本_foo就打印出来了tab

您有解决这个问题的想法吗?

答案1

这是关于 zsh 的一般答案。我不知道哦,天哪。

默认情况下,zsh 在尝试完成之前会扩展别名。这通常是正确的事情。因此,将完成函数与别名的名称相关联仅在绕过别名时才有效,例如 after \fooTab

您可以使用以下命令关闭此行为setopt complete_aliases。但是,对于未明确设置完成的所有别名,您将失去完成功能。

如果您想要 的特殊情况foo,最好的方法是将其改为函数。

function foo {
  path/to/my/program "$@"
}

这并不能解释为什么_foo要打印。也许有些奇怪的东西。

相关内容