Ubuntu 终端中某些命令的自动完成选项

Ubuntu 终端中某些命令的自动完成选项

我正在运行 Ubuntu 18.04,并使用 VisualStudio Code 进行大部分代码编辑。要从终端打开文件,我运行以下命令

code fileName.java

一旦我编译了 Java 代码,目录中还会有关联的 .class 文件。这意味着下次我打开文件并尝试使用“Tab”自动完成命令时,它将自动完成为

code fileName.

你能告诉我如何更改命令的选项吗code,这样当我输入

code f

然后按 Tab,它会自动完成

code fileName.java

而不仅仅是

code fileName.

答案1

将其添加到您的.bashrc

complete -f -X '!*.java' code

并且source ~/.bashrc它曾经

  • 将于-fF仅限文件。
  • 允许-X pattern定义自定义图案
  • 这种习俗自动完成只会发生在你的code命令上,任何不匹配的完成图案从完成列表中删除。

答案2

解决问题的最佳方法是创建 bash 完成脚本。

使用您最喜欢的文本编辑器创建具有名称的新 bash 完成脚本java,例如,让它成为 nano 编辑器:

user@pc:~$ sudo nano /etc/bash_completion.d/java

将代码插入脚本:

_code()
{
  local cur=${COMP_WORDS[COMP_CWORD]}

  local IFS=$'\n'
  COMPREPLY=( $( compgen -f -X '!*.java' -- $cur ) )
}

complete -o filenames -F _code code

保存更改并关闭文本编辑器。

最后重新加载 bash 完成规则 - 注意第一个斜杠前的“点”和后面的空格:

user@pc:~$ . /etc/bash_completion

这个解决方案有2个优点:

  1. 该脚本在整个系统范围内有效。
  2. 它支持文件名中的空格。

相关内容