如何实现Makefile通配符目标的Tab自动补全
实现Makefile通配符目标的Tab自动补全
没问题,我来帮你搞定Makefile里这些通配符目标的Tab自动补全!针对bash和zsh这两种最常用的shell,我分别给你具体的实现方案:
针对Bash Shell
你可以通过编写自定义补全函数,让bash识别出abcd_defconfig这类衍生目标。
- 首先创建补全函数
在终端里输入以下代码(或者直接写到你的bash配置文件里):
_make_defconfig_completion() { # 获取当前输入的单词 local cur=${COMP_WORDS[COMP_CWORD]} # 扫描当前目录下的所有.config文件,提取文件名前缀(去掉.config后缀) local config_prefixes=$(ls *.config 2>/dev/null | sed 's/\.config$//') # 生成对应的_defconfig目标列表 local target_candidates=$(printf "%s_defconfig\n" $config_prefixes) # 根据当前输入过滤候选目标,返回给补全系统 COMPREPLY=($(compgen -W "$target_candidates" -- "$cur")) }
- 绑定补全函数到
make命令
执行这条命令让补全生效:
complete -F _make_defconfig_completion make
- 让补全永久生效
如果希望每次打开终端都能使用这个补全,把上面的函数和complete命令添加到你的~/.bashrc或者~/.bash_profile文件末尾,然后执行source ~/.bashrc(或者对应的配置文件)让修改立即生效。
针对Zsh Shell
Zsh的补全系统更强大,实现起来同样简单:
- 创建补全函数
_make_defconfig_completion() { # 扫描当前目录下的.config文件,用:r后缀修饰符去掉.config扩展名 local config_prefixes=(*.config(:r)) # 生成候选目标,把前缀和_defconfig拼接 _arguments '*:target:(${(j: :)config_prefixes}_defconfig)' }
- 绑定补全函数到
make命令
执行这条命令激活补全:
compdef _make_defconfig_completion make
- 永久生效
把上述函数和compdef命令添加到你的~/.zshrc文件末尾,执行source ~/.zshrc即可让设置永久生效。
额外说明
- 如果你的
.config文件不在当前工作目录,可以修改扫描路径(比如把*.config换成path/to/your/configs/*.config) - 测试的时候,输入
make abcd然后按Tab,就应该能自动补全成make abcd_defconfig啦!
内容的提问来源于stack exchange,提问作者Anuraag Tummanapally
相关产品推荐
相关产品推荐

