我有时会注意到,bash 中的 tab 补全功能非常有用。我是一名 Java 程序员,经常在终端中使用java
和命令来执行快速或远程任务。javac
假设我在目录中有两个常见文件MyProgram.java
:MyProgram.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:~”。