我最近安装了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
。