An attempt at saner Bash defaults. Inspired by Tim Pope's sensible.vim.
Sensible Bash is intended to be a simple starting point for a better Bash user experience out of the box. Refer to source for a complete list of all the options. Here's a taste:
Options to improve on Bash's default tab completion. These settings get Bash to:
- Perform file completion in a case insensitive fashion;
- Treat hyphens and underscores as equivalent;
- Display matches for ambiguous patterns at the first press of the tab key (instead of requiring two tab-presses).
Some tweakings to the command history, mostly taken from Tom Ryder's article Better Bash History. These options will get Bash to:
- Append to the history file instead of overwriting it;
- Save multi-line commands as one command;
- Record each line as it gets issued;
- Keep track of a bigger history;
- Avoid duplicate entries;
- Avoid recording unneeded commands (
exit
,ls
,bg
,fg
, andhistory
itself); - Make use of a timestamp format that is actually useful.
Options to make file system navigation blazingly fast:
- Prepend cd to directory names automatically, so you can
cd
into directories just by typing their name; - Automatically correct spelling errors during tab-completion;
- Automatically correct spelling errors in arguments supplied to
cd
; CDPATH
defines wherecd
will look for targets—the default is the current working directory, but you can add directories you want to have fast access to (ex:projects
,repos
,documents
...)cdable_vars
allows you to define paths as variables andcd
into it from wherever you are in the file system, kind of like a bookmarking system for Bash.
You can copy sensible.bash
in your bashrc
, cherry-pick the options you like most, or source the file at the top of your bashrc
:
if [ -f ~/bin/sensible.bash ]; then
source ~/bin/sensible.bash
fi
In order to get Sensible Bash to work correctly, make sure that:
- You're running at least Bash 4.x. Keep your software up-to-date!
- You have the Bash Completion package installed and properly configured on your system.
If you're using OS X, I recommend to follow Josh Staiger's advice and source bashrc
from bash_profile
so to keep all your configuration in one place.
Consider this as a work in progress where everything is open for discussion. I'm looking for feedback! Feel free to open an issue, submit a pull request, or let me know on Twitter if you think I've missed something important. Same goes for options you think should be removed.
- My article about Sensible Bash
- My dotfiles for more *nix configuration goodies
- Unix as IDE, my ebook port of the excellent post series by Tom Ryder