首先,我们假设我有:
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 \foo
Tab。
您可以使用以下命令关闭此行为setopt complete_aliases
。但是,对于未明确设置完成的所有别名,您将失去完成功能。
如果您想要 的特殊情况foo
,最好的方法是将其改为函数。
function foo {
path/to/my/program "$@"
}
这并不能解释为什么_foo
要打印。也许有些奇怪的东西。