Bash中不区分大小写的选项卡完成


142

有什么方法可以使Bash选项卡不区分大小写吗?

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

我正在使用Mac OS X 10.6

Answers:


170

更新中的文字/etc/inputrc以包括

设置完成忽略案例

然后使用^X ^R重新加载配置。


30
“也”- /etc/inputrc~/.inputrc由指定的文件INPUTRC是它只能进入的位置。在Bash提示符下输入该命令将无效。
丹尼斯·威廉姆森

哎呀!您说对了:)
约翰·T

10
^X ^R重新加载inputrc
grawity 2010年

14
@DennisWilliamson:您可以bind "set completion-ignore-case on"从命令行执行;我认为,这仅是终端会议
Clay Bridges

1
所以,这是什么msysgit有,但MSYS2缺乏!在这里,我试图在例如/ etc / profile中找到它
SamB

111

经过事后观察,进行了重组,以对比使用[.]inputrcvs.的优缺点.bash_profile
顶一下帽子,向underscore_d寻求帮助。

注意: Bash中的命令行编辑是由Readline库提供的。定制它并非易事,但值得学习;它的功能包括定义用于插入预定义文本片段的自定义键盘快捷键的功能-请参见《 Bash参考手册》中的“ 命令行编辑 ”。

要在Bash中始终使制表符完成不区分大小写:


选项A:如果您已经拥有:

  • 一个/etc/inputrc文件(适用于整个系统,需要进行修改sudo
  • 和/或~/.inputrc文件(特定于用户)

    和/或

您打算广泛地自定义readline库,并且/或者希望在脚本调用时对脚本也有效read -e

加线

set completion-ignore-case on

哪个文件,具体取决于您希望该设置对所有用户还是当前用户有效(如有必要,请创建文件)。

使文件和目录名称的完成更容易的一个相关命令是:

set show-all-if-ambiguous on

这样,当有多个匹配项时,无需再按两次 Tab键。


选项B:或者,您可以通过将Readline命令作为单个参数传递给内建命令,将Readline命令添加到~/.bash_profileOS X(或~/.bashrcLinux)上的用户特定文件中:bind

bind "set completion-ignore-case on"
bind "set show-all-if-ambiguous on"

注意/ 中的bind命令优先于或中的等效命令。~/.bash_profile~/.bashrc/etc/inputrc~/.inputrc

如上所述,以这种方式定义的Readline配置在调用激活Readline支持以读取用户输入的脚本不会生效。read -e


10
如果模棱两可,则显示所有内容真好!我经常想知道为什么他们让我两次单击以执行该操作。在我的未来节省了成千上万的按键!谢谢!
user34112 2013年

4
太棒了,它甚至适用于cd命令。这解决了这个问题,也将为我节省成千上万的按键。:)
hoosierEE 2014年

1
大点重show-all-if-ambiguous。但是,既然您说“作为替代”,那么bindinputrc文件似乎不必要时,通过这样做实际上有什么好处吗?
underscore_d

1
@underscore_d:好问题;请参阅我的最新答案。
mklement0

1
太好了,谢谢!在Debian 8.2上,我没有inputrc,但是我很高兴创建~/.inputrc并添加了这些代码,以及其他非常有用的指令。我想我们假设所有读者都知道/etc/inputrc 会影响其他用户(除非后者覆盖受影响的设置)?就在我们提到警告时;)
underscore_d

1

为了避免更改所有用户的配置并避免root权限,请使用以下命令:

if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
echo 'set completion-ignore-case on' >> ~/.inputrc

然后重新登录或重新加载〜/ .inputrc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.