Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Is there any way to make Bash tab complete case insensitively?

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

I am using Mac OS X 10.6

share|improve this question
up vote 99 down vote accepted

Update the text in /etc/inputrc to include

set completion-ignore-case on

Then use ^X ^R to reload the configuration.

share|improve this answer
18  
"as well" - /etc/inputrc or ~/.inputrc or a file designated by INPUTRC are the only places it can go. Entering that at a Bash prompt won't work. – Dennis Williamson Jan 1 '10 at 21:11
    
whoops! you're right :) – John T Jan 1 '10 at 21:18
    
Thank you, works perfectly. – Jeffrey Aylesworth Jan 2 '10 at 0:00
5  
^X ^R to reload inputrc – grawity Jan 2 '10 at 9:37
11  
@DennisWilliamson: you can do bind "set completion-ignore-case on" from the command line; for, I believe, that terminal session only – Clay Bridges Oct 4 '11 at 19:45

Restructured with the benefit of hindsight to contrast the pros and cons of using [.]inputrc vs. .bash_profile.
Tip of the hat to underscore_d for his help.

Note: Command-line editing in Bash is provided by the Readline library; customizing it is non-trivial, but well worth learning; its features include the ability to define custom keyboard shortcuts for inserting predefined snippets of text - see Command Line Editing in the Bash Reference Manual

To persistently make tab-completion case-insensitive in Bash:


Option A: If you either already have:

  • an /etc/inputrc file (applies system-wide, modification requires sudo)
  • and/or a ~/.inputrc file (user-specific)

    and/or

you're planning to customize the readline library extensively and/or want to make customizations effective for scripts too when they call read -e:

Add line

set completion-ignore-case on

to either file, depending on whether you want the setting to be effective for all users or the current user (create the file, if necessary).

A related command that makes completion of file and directory names easier is:

set show-all-if-ambiguous on

This makes it unnecessary to press Tab twice when there is more than one match.


Option B: Alternatively, you may add Readline commands to your user-specific ~/.bash_profile file on OS X (or ~/.bashrc on Linux), by passing them as a single argument to the bind builtin:

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

Note that bind commands in ~/.bash_profile / ~/.bashrc take precedence over equivalent commands in either /etc/inputrc or ~/.inputrc.

As implied above, Readline configuration defined this way will not take effect in scripts that call read -e to activate Readline support for reading user input.

share|improve this answer
5  
show-all-if-ambiguous is so nice! I often wondered why they made me tab twice to perform that action. thousands of keystrokes saved in my future! thanks! – user34112 Sep 24 '13 at 7:16
3  
Awesome, it even works for cd commands. Which solves this question and will be saving me thousands of keystrokes too. :) – hoosierEE Mar 27 '14 at 0:08
    
Great point re show-all-if-ambiguous. However, since you say "as an alternative", is there actually any benefit to doing this via bind, when the inputrc files seem to make that unncessary? – underscore_d Oct 18 '15 at 21:07
    
@underscore_d: Good question; please see my updated answer. – mklement0 Oct 18 '15 at 21:25
1  
I think that covers everything - thanks for your efforts making a great answer even better! – underscore_d Oct 19 '15 at 8:41

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .