Bash 文件名制表符补全

Bash 文件名制表符补全

我有时会注意到,bash 中的 tab 补全功能非常有用。我是一名 Java 程序员,经常在终端中使用java和命令来执行快速或远程任务。javac

假设我在目录中有两个常见文件MyProgram.javaMyProgram.class

如果我要求 bash 从命令前缀 进行制表符补全java M,它会直接填充为java MyProgram,这很有帮助。显然,bash 要么配置为仅接受*。班级命令的补全java(并且知道去掉文件扩展名),或者java命令以某种方式告诉 bash 这一点。

我想用文本编辑器完成同样的操作,这样我就可以输入nano M并让它按制表符完成,nano MyProgram.java而不是暂停nano MyProgram.,是否可以说,黑名单*。班级从 nano 的标签完成吗?

我最感兴趣的是知道这是否是 bash 配置或程序端的某些东西。

答案1

java有一个单独的自动完成脚本,可以覆盖默认的完成机制。在我的发行版 (Arch Linux) 中,它安装在 中/usr/share/bash-completion/completions/java

要覆盖制表符补全的行为,您可以创建这样的脚本。如果您只想让.class每个命令都忽略所有文件,您可以设置FIGNORE变量(例如在您的 中~/.bashrc)。示例:FIGNORE=.class。来自 的手册页bash

FIGNORE
执行文件名补全时要忽略的以冒号分隔的后缀列表(请参阅下面的 READLINE)。后缀与 FIGNORE 中的条目之一匹配的文件名将从匹配文件名列表中排除。示例值为“.o:~”。

相关内容