类路径的奇怪 javac Tab 补全

Strange javac Tab Completion for Classpath

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 中使用 bash。0_111 如果相关的话。

此功能由 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)
    ...

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

此外,最新版本的代码也可以在 github 上查看。那里定义的其他命令完成(javajavadoc)理解 short-hand 标志,因此我确定欢迎提出修复此问题的拉取请求。


更新:现在是fixed来源。