tcsh 中 Makefile 规则的自动完成

tcsh 中 Makefile 规则的自动完成

tcsh我在 SUSE 11 盒子中使用,我意识到在输入时

makeTab

它允许我自动完成 Makefile 中可用的规则,而不是当前目录中的文件。

我已经在工作中使用 RedHat 和 Ubuntu 以及在家里使用 Debian(全部使用tcsh)进行了测试,但它们都不支持这种(IMO)良好的行为。

其他发行版如何也能实现这一目标?
这是我从很多年前就想拥有的东西。

答案1

您需要添加complete对 shell 启动文件 ( ~/.tcshrc) 的调用。显然您的 SuSE 盒子已经预定义了以下规则make:在/etc/csh.cshrctcsh ( ) 旁边提供的文件或其他文件中查找它们rpm -ql tcsh

tcsh 发行版附带了一些示例补全(Debian 将它们放在 中/usr/share/doc/tcsh/examples/complete.tcsh.gz);这是一个make

complete make \
    'n/-f/f/' \
    'c/*=/f/' \
    'n@*@`cat -s GNUmakefile Makefile makefile |& sed -n -e "/No such file/d" -e "/^[^     #].*:/s/:.*//p"`@'

答案2

使用StackOverflow 上的这个答案使用make自身来计算所有可用目标并将其合并到 Debian 示例脚本中,如下所示另一个答案在这里然后添加更多,这会产生:

alias complete_make_target_filter 'awk -F: '"'"'/^[a-zA-Z0-9][^\$#\/\t=]*:([^=]|$)/ {split($1,A,/ /);for(i in A)print A[i]}'"'"

complete make \
    'n/--assume-old/f/' \
    'n/--assume-new/f/' \
    'n/--directory/d/' \
    'n/--file/f/' \
    'n/--include-dir/d/' \
    'n/--makefile/f/' \
    'n/--new-file/f/' \
    'n/--old-file/f/' \
    'n/--what-if/f/' \
    'n/-d/d/' \
    'n/-f/f/' \
    'c/*=/f/' \
    'n@*@`make -qp  |& grep -v Stop |complete_make_target_filter|xargs echo --always-make --directory -d --debug -e --environment-overrides --file --makefile -i --ignore-errors -I --include-dir -j --jobs -k --keep-going -l --load-average --max-load -L --check-symlink-times -n --just-print --dry-run --recon -o --old-file --assume-old -p --print-database -q --question -r --no-builtin-rules -R --no-builtin-variables -s --silent --quiet -S --no-keep-going --stop -t --touch -v --version -w --print-directory --no-print-directory -W --what-if --new-file --assume-new --warn-undefined-variables`@'

将其与其他漂亮的完成脚本一起放入一个~/.complete/目录中,然后将它们全部放入您的目录中,~/.cshrc然后就一切就绪了。

相关内容