Bash-completion:始终显示所有文件

Bash-completion:始终显示所有文件

我最近安装了bash-completion(通过 homebrew)。它现在省略了完成列表中的文件,我它来显示,并完全省略有效选项,例如这个:

[alex@mbp foo]$ ls
bar.csv foo.csv
[alex@mbp foo]$ sh ../dosomething.sh fo<TAB>
((nothing shown))

作为一名重度命令行用户,这非常烦人。有人能告诉我如何禁用此行为吗?我在文档或 Google 中找不到任何有用的东西。

bash 完成常问问题说:

问:bash 完成代码禁止某些命令完成具有我环境中合法扩展名的文件。我是否必须禁用该命令的完成才能完成我需要的文件?

答:不。使用 M-/(按照 bash 手册页的说法)尝试在光标左侧的文本上完成文件名补全。这将绕过 bash 补全代码设置的任何文件类型限制。

但这对我来说不是一个可接受的解决方案 - 我希望“TAB”显示所有文件/目录,无论扩展名对文件是否有效(这就是它在过去 20 年里对我来说效果很好的方式)。

我怎样才能实现这个目标?

我更喜欢.bashrc/.bash_profile设置而不是删除全局完成脚本。这是我目前包含 bash-completion 的方式(它只是一个普通的自制安装):

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

更新:我看过这个Bash 文件名制表符补全但它并不是我想要的,因为它需要对地球上/我的系统上所有可能的文件扩展名进行太多的手动工作。

答案1

接受的答案仍然不能真正解决问题,因为它破坏了命令完成(即“pyt + TAB”以获取python等),因为它不包含在完整文件名中。

complete -o default python

这不会修复所有命令的问题(本例中只有“python”),但会修复某些行为严重错误的命令的问题。遗憾的是,似乎没有一种干净的方法可以将所有内容设置为“默认”(即 Readline 的默认设置),您必须对可能使用的每个命令都进行此操作。或者使用上面的 .inputrc 解决方法。

答案2

对此也感到很烦恼,所以我阅读了 bash 手册。我相信使用这个~/.inputrc文件可以实现所需的行为:

TAB: complete-filename
M-/: complete

具有全套规则的常规补全映射到 ,Meta-/而仅文件名补全映射到TAB

相关内容