类路径的奇怪javac Tab完成

时间:2017-01-24 04:36:35

标签: bash javac tab-completion bash-completion

javac命令使用-cp-classpath完成了奇怪的标签。我的印象是-cp-classpath的别名。但是,当我在-classpath标志后按Tab键时,我会按预期获得.jar个文件。当我用-classpath按Tab键时,我得到:

javac -classpath <tab>
javac -classpath lib/ <tab>
javac -classpath lib/test.jar

javac -classpath .: <tab>
javac -classpath .:lib/ <tab>
javac -classpath .:lib/test.jar

或者,使用-cp

javac -cp <tab>
javac -cp lib/ <tab>
javac -cp lib/

javac -cp .: <tab>
javac -cp .:

我在ubuntu 16.04和javac 1.8.0_111中使用bash,如果这是相关的。

1 个答案:

答案 0 :(得分:3)

此功能由bash-completion包实现。您可以找到相关功能的代码,如下所示:

$ complete -p javac
complete -F _javac javac  # the function `_javac' is used to complete the command `javac'
$ declare -f _javac .     # this will print the function code

你会看到相关的代码是:

case $prev in
    ...
    -classpath|-bootclasspath|-sourcepath|-extdirs)
    ...

因此,如果您愿意,可以从_javac()命令中获取declare -f的完整定义,将其修改为在-cp语句中包含case,然后附加它到bash init文件的 end .bashrc.bash_profile等)。然后,当您启动新shell时,新的_javac()将用于完成javac命令。

此外,最新版本的代码也可在github上查看。那里定义的其他命令完成(javajavadoc)理解简写标志,所以我确信一个针对此问题修复的pull请求将是受欢迎的。

更新:源代码现在为fixed