Ubuntu's Terminal uses case-sensitive auto-completion, as I suppose would be expected for Linux.

But I think it would often be more convenient to use a case-insensitive one instead, to save you having to be accurate while starting a name, and would probably be worth the extra false positives. Is it possible to change this behaviour?

up vote 143 down vote accepted

Open a terminal, run

# If ~./inputrc doesn't exist yet, first include the original /etc/inputrc so we don't override it
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

Start a new shell / terminal.

to make this change for all users, edit /etc/inputrc

For details, see man bash . Yes it is a long page, but bash is a somewhat complex program, and if you want just search that page for "case-insensitive" to go to the relevant section. People usually learn bash one option at a time or one bash script at a time and it takes a long time to master all the nuances. Your interest may vary.

  • Thanks. I appreciate the user-specific/non-admin friendly solution. The echo line seems to have worked, but now I seem to have lost the ability to use Ctrl-Left/Right to move the cursor. Also, would >> be safer than >? – mwfearnley Dec 12 '11 at 6:27
  • In general >> is going to be safer, my mistake, I was assuming you did not have a ~/.inputrc . I also set noclobber =) Bit sure why your arrow keys are not working, I can not replicate that. You can remove ~/.inputrc and start a new shell. – Panther Dec 12 '11 at 6:30
  • Yeah, it works again if I remove it.. According to linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html the new inputrc might be overriding the global one? – mwfearnley Dec 12 '11 at 7:00
  • 2
    Holy shit, I copied this into /etc/inputrc and I can't type "i" anymore and when I type "e" it just spams "ssssssssss[..]" into the console.. better use the solution from @emtin4 – Luca Steeb Mar 31 '16 at 23:49
  • 1
    @LucaSteeb I hit that too, but then realized this whole block is not supposed to be put in your .inputrc, but typed once. Only $include /etc/inputrc and set completion-ignore-case on should be in your ~..inputrc file. – Chris Jan 8 at 19:32

Open a terminal and type the below command:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

Enter password. Restart terminal.

If in some case you want to remove case insensitive, just edit /etc/inputrc file by removing the set completion-ignore-case line.

That's all.

  • OK, I clarified that for you. It takes a while to learn about bash, but keep exploring, reading, and asking. linuxcommand.org is a popular start ;) – Panther Dec 14 '11 at 16:46
  • 2
    In case there is more than one user, this changes it for all, which may or may not be the desired behavior – Walter Tross Jun 19 '15 at 17:35
  • 2
    by far the most straight forward and simplistic answer here – workabyte Jun 30 '16 at 21:31
  • simple and clear answer – tinybyte Sep 2 at 7:29

I know this question is very old but unless I am missing something I think I have a super simple solution if you are using bash.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

Or just add the line using your favorite text editor. Restart your bash session and enjoy.

  • Well, you're missing something: ~/.inputrc is read by readline, which is what bash uses to provide this completion. Readline is also used by other programs, so, for generally setting this, ~/.inputrc as suggested the accepted answer would be better. – muru Jan 31 '16 at 2:50
  • Thanks for your suggestion, it teaches me a little more, but I have to say that it doesn't seem any simpler than the one I accepted, which just uses an additional line to ensure the new file doesn't nullify the old. – mwfearnley Feb 1 '16 at 20:52
  • perfect. well the only thing to remember is bind 'set completion-ignore-case on' should go in new line of .bashrc – Vishrant Aug 18 at 23:20

This is done by setting an option for GNU readline, which is what handles the input in an interactive shell.

The magic line needed is set completion-ignore-case on, and can be put in the users's ~/.inputrc file, or the system /etc/inputrc to enable it for all users. This is the initialisation file for readline.

But there is an important caveat: /etc/inputrc is only processed if ~/.inputrc doesn't exist.

So if you create ~/.inputrc, you will suddenly find that the system /etc/inputrc is no longer applied next time you open a terminal. (For me this caused me to lose some key mappings, such as Ctrl-Left/Right. You can see which ones by perusing the /etc/inputrc.)

The way to fix this this problem is to have the line $include /etc/inputrc inside ~/.inputrc. e.g.

$include /etc/inputrc

set completion-ignore-case on

More information about readline and inputrc can be found in man bash and man 3 readline.

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.