问题描述
我为 make
命令编写了我的自动完成功能,并将其放置在 ~/.zsh
中:
I wrote my auto-completion function for make
command, and placed it in ~/.zsh
:
function __comp_make {
# ... function body ....
}
compctl -K __comp_make make
不幸的是,它不会工作,因为 make
的完成已经在
Unfortunately, it will not work because completion for make
is already defined in
/usr/share/zsh/functions/Completion/Unix/_make
显然它优先于我的规则.
and apparently it takes precedence over my rule.
我不得不将 _make
重命名为 unused_make
以便它不会在 zsh 初始化时加载.它有效,但它是相当丑陋的解决方案.
I had to rename _make
to unused_make
so it is not loaded at zsh initialization. It works, but it is rather ugly solution.
我的问题是:我应该如何设置完成规则,使其优先于加载的默认值?
My question is: how should I set my completion rule so it takes precedence over the loaded defaults?
相关:
- zsh 4.3.17
推荐答案
在你的 ~/.zshrc
中,类似:
fpath=( ~/.zshfunctions $fpath )
其中 ~/.zshfunctions
包含您的自定义完成文件,应该为您解决这个问题.请注意,您的功能在系统功能之前加载.这将不起作用:
where ~/.zshfunctions
contains your custom completion files, should solve this for you. Note that your functions are loaded before the system ones. This will not work:
fpath=( $fpath ~/.zshfunctions )
顺便说一句,您正在使用 compctl
.它老了.我建议改用 compsys
,尽管一个很好的链接解释了为什么现在让我逃脱.
As an aside, you're using compctl
. It's old. I'd recommend using compsys
instead, although a decent link explaining why escapes me at the moment.
这些是关于编写完成函数的一些细节,包括 fpath
.您可能会发现它们可供参考.
These go into some detail about writing completion functions, including the fpath
. You might find them useful for reference.
这篇关于ZSH:如何禁用`make`的默认完成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!