bash - 类路径的奇怪 javac Tab 补全

标签 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(如果相关)。

最佳答案

此功能由 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() 的整个定义,并将其修改为包含 -cp 在该 case 语句中,并将其附加到 bash 初始化文件的末尾(.bashrc.bash_profile等)。然后,当您启动新的 shell 时,新的 _javac() 将用于完成 javac 命令。

此外,最新版本的代码也可以在 github 上查看。 。那里定义的其他命令完成(javajavadoc)了解简写标志,因此我确信修复此问题的拉取请求将受到欢迎。


更新:现在是 fixed在源代码中。

关于bash - 类路径的奇怪 javac Tab 补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41820102/

相关文章:

bash - 来自 FIFO 的多个读卡器

html - 在 PERL 中使用 SSH 运行 bash 命令

java - 尝试编译 java 代码时出现非法字符

java - 如何在hadoop 0.23.0 MR2上运行和编译java程序

bash - 如何获取当前shell脚本的完整路径名?

java - 编译器如何处理选择语句变体

bash - 无法在 Zsh 中找到 Bash 的完整替代命令

bash - 无法在没有反斜杠的情况下对系统变量进行制表符补全

linux - 是否可以为我的 linux 函数复制命令的制表符补全?

json - 从 VBoxManage 输出中解析冒号分隔的表格数据