ZSH:如何禁用“make”的默认完成?

ZSH:如何禁用“make”的默认完成?,zsh,Zsh,我为make命令编写了自动完成函数,并将其放置在~/.zsh中: 不幸的是,它将不起作用,因为make的完成已在中定义 /usr/share/zsh/functions/Completion/Unix/_make 很明显,它优先于我的规则 我不得不将_make重命名为unused _make,以便在zsh初始化时不加载它。这是可行的,但这是一个相当丑陋的解决方案 我的问题是:如何设置完成规则,使其优先于加载的默认值 相关的: 编辑: zsh 4.3.17 你需要设定你的目标。看 在~/.zsh

我为make命令编写了自动完成函数,并将其放置在~/.zsh中:

不幸的是,它将不起作用,因为make的完成已在中定义

/usr/share/zsh/functions/Completion/Unix/_make
很明显,它优先于我的规则

我不得不将_make重命名为unused _make,以便在zsh初始化时不加载它。这是可行的,但这是一个相当丑陋的解决方案

我的问题是:如何设置完成规则,使其优先于加载的默认值

相关的:

编辑:

zsh 4.3.17 你需要设定你的目标。看

在~/.zshrc中,类似于:

fpath=( ~/.zshfunctions $fpath )
如果~/.zshfunctions包含您的自定义完成文件,应该可以为您解决这个问题。请注意,您的函数是在系统函数之前加载的。这是行不通的:

另外,您正在使用compctl。这是旧的。我建议改用compsys,尽管我现在还没有找到解释原因的链接

其中详细介绍了如何编写完成函数,包括fpath。你可能会发现它们对参考很有用

你需要设定你的目标。看

在~/.zshrc中,类似于:

fpath=( ~/.zshfunctions $fpath )
如果~/.zshfunctions包含您的自定义完成文件,应该可以为您解决这个问题。请注意,您的函数是在系统函数之前加载的。这是行不通的:

另外,您正在使用compctl。这是旧的。我建议改用compsys,尽管我现在还没有找到解释原因的链接

其中详细介绍了如何编写完成函数,包括fpath。你可能会发现它们对参考很有用


我将它添加到.zshrc并将我的函数移动到.zshfunctions,但它不起作用。它的作用就像它在任何地方都没有定义一样。@JakubM。那不好。当我这样做时,我可以覆盖默认的制表符完成,因为命令制表符完成为空。如果我遵循,使用compdef make而不是compdef hello,我将在make上获得自定义完成。如果您没有遇到这种情况,我建议检查:echo$fpath,并检查完成函数的内容。我不是100%确定如何完成compctl-也许我错过了什么。好的,按照博客中的所有说明,它是有效的。显然,这就是方法,我们应该忘记compctlI将其添加到.zshrc并将我的函数移动到.zshfunctions,但它不起作用。它的作用就像它在任何地方都没有定义一样。@JakubM。那不好。当我这样做时,我可以覆盖默认的制表符完成,因为命令制表符完成为空。如果我遵循,使用compdef make而不是compdef hello,我将在make上获得自定义完成。如果您没有遇到这种情况,我建议检查:echo$fpath,并检查完成函数的内容。我不是100%确定如何完成compctl-也许我错过了什么。好的,按照博客中的所有说明,它是有效的。显然,这就是解决问题的方法,我们应该忘记compctl
fpath=( $fpath ~/.zshfunctions )