如何让 shell 自动完成文件路径的开头?

如何让 shell 自动完成文件路径的开头?

我有一个包含深层嵌套文件夹结构的项目。大多数时候,我知道要使用的文件的名称,但是当我想编辑它时,文件夹路径太长/太复杂而无法输入,例如:

vim folder/is/deep/down/there/myfile.js

如果文件名是唯一的,有没有办法让 shell 自动为我填充路径,例如:

vim *myfile.js

tab

vim folder/is/deep/down/there/myfile.js

我主要使用 bash,但如果它可以解决问题,我也可以使用 zsh。

答案1

在 zsh 中,你可以使用**运算符执行以下操作:

vim **/myfile.js

然后按下Tab,zsh 将递归搜索该myfile.js文件。

答案2

在 Bash 4 及更高版本中,你还可以使用**运算符进行通配符(获取文件名)和制表符补全(类似于Heptite 的 zsh 答案)。

我不知道**Bash(可能是 4.0)何时添加了 tab 补全功能,甚至不知道它们是否是标准功能,但它们在 4.3.11(在 Lubuntu 上)中对我有用。它们似乎默认处于激活状态。

**但是,默认情况下不会激活 for globbing的行为,需要您globstar使用 设置选项shopt。也就是说,shopt -s globstar在尝试**在 globbing 模式中使用之前,在某处执行(最有可能在您的 中.bashrc)。值得指出的是,globstar当有多个匹配项时,激活可能会干扰您的制表符完成。我在快速测试中发现了这一点。

相关内容