tcsh
我在 SUSE 11 盒子中使用,我意识到在输入时
make
Tab
它允许我自动完成 Makefile 中可用的规则,而不是当前目录中的文件。
我已经在工作中使用 RedHat 和 Ubuntu 以及在家里使用 Debian(全部使用tcsh
)进行了测试,但它们都不支持这种(IMO)良好的行为。
其他发行版如何也能实现这一目标?
这是我从很多年前就想拥有的东西。
答案1
您需要添加complete
对 shell 启动文件 ( ~/.tcshrc
) 的调用。显然您的 SuSE 盒子已经预定义了以下规则make
:在/etc/csh.cshrc
tcsh ( ) 旁边提供的文件或其他文件中查找它们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
然后就一切就绪了。