如何将非拉丁gnu / make目标添加到完成列表?

时间:2015-07-26 10:44:46

标签: bash gnu-make bash-completion

gnu / make 支持makefile中的非拉丁语标识符(f.e.,targets)。

示例:

$ cat GNUmakefile
test:
  @echo test
тест:
  @echo test in russian

$ make test тест
test
test in russian

但是此示例中的 bash-completion 只完成了一个目标 - test

“make”+ tab →“make test”。

如何将非拉丁目标添加到完成列表中?

使用不同版本的 bash-completion 在各种发行列表(debian 5-8,ubuntu 12-15,centos 5-6,mandriva 2008)上进行了测试。

至少在最近版本的 bash-completion 中我需要支持此功能。

2 个答案:

答案 0 :(得分:4)

我找到了解决方案。

来自文件_make_target_extract_script的函数/usr/share/bash-completion/completions/make中的错误,该文件返回 sed -script,其中包含以下行:

/^[^a-zA-Z0-9]/             d             # convention for hidden tgt

删除以非拉丁字符开头(特别是)的目标。

在我看来,这样的正则表达式会更合适(见this):

/^[^[[:alnum:]]]/             d             # convention for hidden tgt

如果您无法修改/usr/share/bash-completion/completions/make,则可以添加~/.bashrc这样的行(基于this answer):

_completion_loader make
eval "$(type _make_target_extract_script | sed '1d;s/a-zA-Z0-9/[[:alnum:]]/')"

<强>更新

我提交bug report(不幸的是,需要注册)。

答案 1 :(得分:1)

直接解决方案是,如果您希望看到此工作正常,请切换到zsh oh-my-zsh

enter image description here

Bash因各种错误和不支持的功能而闻名。 zsh的工作速度提高了2倍,与bash POSIX shell几乎完全兼容,因此大部分bashrcshell脚本的工作方式与bash zsh相同和foreach($importProduct as $ip){ $_SESSION['importedProducts'] += 1; // ... do the import-stuff }