zsh make 完成:仅完成 Makefile 中的目标

zsh make 完成:仅完成 Makefile 中的目标

当我位于包含Makefile, 的目录中时,我使用 zsh 补全进行 make:

make <TAB>

它完成了两组完成:

  1. Makefile 中的目标
  2. 当前目录下的文件

我只想要1)

如何禁用 2) ?

我已将_make完成文件粘贴在这里:https://ctxt.io/2/AADge23ZFg

答案1

完成情况来自_alternative 'targets:…' 'variables:…' '*:…'.

_alternative函数列出了之间的选择标签。标签的顺序和选择可以是配置好的tag-order风格。样式的上下文是:completion::complete:make::- 您可以从文档中解决这个问题(包括zstyle,或者在^X?(_complete_debug)。

据我了解,要仅完成目标和变量名称,而不完成文件名,您可以这样设置标签顺序:

zstyle ':completion::complete:make::' tag-order 'targets variables' -

然而,通过实验,这根本没有提供任何完成,我不明白为什么。

然而,真正有效并且可能更有用的是设置标签顺序以优先考虑目标和变量名称。然后仅在没有匹配的目标或变量名时才尝试完成文件名。make stuffTab

zstyle ':completion::complete:make::' tag-order 'targets variables'

或者,忽略变量,除非没有目标匹配,并忽略文件,除非目标和变量都不匹配:

zstyle ':completion::complete:make::' tag-order targets variables

(哦,为了完整起见,您可以使用 完全禁用make参数的所有文件完成zstyle ':completion::complete:make::' file-patterns ''。但这甚至会禁用诸如 之类的东西的完成make -f,不幸的是,它没有不同的上下文字符串。)

相关内容