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

Mar*_*ter 6 shell zsh make autocomplete

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

make <TAB>
Run Code Online (Sandbox Code Playgroud)

它完成了两组完成:

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

我只想要1)

如何禁用 2) ?

我已将_make完成文件粘贴到此处:https ://ctxt.io/2/AADge23ZFg

Gil*_*il' 5

完成情况来自_alternative \'targets:\xe2\x80\xa6\' \'variables:\xe2\x80\xa6\' \'*:\xe2\x80\xa6\'.

\n

该函数列出了标签_alternative之间的选择。标签的顺序和选择可以使用style进行配置。样式的上下文是\xe2\x80\x94 您可以从文档(包括 的文档)中计算出来,或者在( )生成的跟踪中读取它。tag-order:completion::complete:make::zstyle^X?_complete_debug

\n

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

\n
zstyle \':completion::complete:make::\' tag-order \'targets variables\' -\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
zstyle \':completion::complete:make::\' tag-order \'targets variables\'\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
zstyle \':completion::complete:make::\' tag-order targets variables\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n