GNU 制作 4.3+
操作系统:Mac
将以下内容添加到.zshrc
文件中后,我能够make
在目标级别Makefile (or 'makefile')
为该文字文件中的包含规则生成自动完成。
zstyle ':completion:*:*:make:*' tag-order 'targets'
autoload -U compinit && compinit
但是,当我将命令分组到子文件中并通过include *.mk
机制包含它们时,zsh
不再生成正确的自动完成语句。仅有的输出顶层 makefile 中定义的目标。
确切的文件结构:
├── install-brew
├── install-oh-my-zsh
├── install-pathogen
├── makefile
├── mk
│ ├── get.mk
│ ├── notes.mk
│ ├── setup.mk
...
和makefile
:
include mk/*.mk
foo:
echo foo
bar:
echo bar
> make [tab]
产生:
> make foo
foo bar
和make get-brew
:
if [ -z `command -v brew` ]; then ./install-brew; else echo "brew detected: `command -v brew`" >&2; fi
(所以 makefile 正在工作)
zsh
即使 make 文件包含支持 make 文件,如何配置以从 makefile 生成完整的用户定义目标列表?
答案1
zstyle ':completion:*:make:*:targets' call-command true
zstyle ':completion:*:*:make:*' tag-order 'targets'
这对我有用,对于 2 级 makefile“include”:只需添加到您的 .zshrc 文件中。来源:https://github.com/zsh-users/zsh-completions/issues/813#issuecomment-902592371
如果检测到GNU,这会导致make
调用完成来帮助确定可能目标的列表。make -nsp --no-print-directory --always-make
make
make
过去是无条件完成的,但是zstyle
2001 年更改为有条件的设置因为调用make
这里最终可能是一项昂贵且有潜在风险的操作。
该风格的描述call-command
可以找到info zsh call-command
:
call-command
这种风格用在诸如 和 之类的命令的函数中,
make
其中ant
直接调用命令来生成匹配会遇到诸如速度慢之类的问题,或者就像在 make 的情况下可能会导致执行 makefile 中的操作一样。如果它设置为“true”,则调用该命令来生成匹配项。该样式的默认值为“false”。