Fishing for the best shell

Billy Davis

Have you ever casted and had your newly baited line get caught on a unforgiving shell? Me too.

Consider fish:

Out of the box you get
Autosuggestions based off of history
Substring history search
Advanced tab completion
Syntax highlighting
Native 256 color support

The friendly interactive shell (fish) is a command line interpreter like Bash, Zsh, tcsh, etc. Fish is fast and gives you a lot of feedback, because everyone loves feedback.

At liquidfish, we spend a good amount time on the command line. Maybe a little too much time. So, while I’m smashing on the keyboard, I like to know my computer is actually catching what I am saying. Fish seems to get me, you know?
Some of the details that are intriguing in fish are:

Syntax highlighting
red == invalid
blue == valid
grey == suggestion

Arguments that are valid paths will be underlined.

Parameter completion
git checkout [tab][tab] will show you your branches and tags that you can check out denoting tags and branches.

Filtered history
Start typing a command in the shell and use your up and down keys to navigate through your history.

Helpful error messages
bdavis ~/D/cloverfield (master) : foo=bar
fish: Unknown command 'foo=bar'. Did you mean 'set foo bar'? See the help section on the set command by typing 'help set.’

Throw your fears overboard and install fish:

brew install fish

If you don’t have brew, install it:

To set fish as your default shell:
chsh -s /usr/local/bin/fish

If you get an error, you’ll most likely need to add /usr/local/bin/fish to your /etc/shells file.

You can always change it back later with: chsh -s /bin/bash

To get started, you really need to go through the fish documentation . Please, take your time ...

If you are writing any custom functions for your shell, you can put them in:
Fish will autoload all the files in that directory. Check out my dotfiles repository for some helpful functions.

As with every shell, a good prompt can give you vital information about your environment. I’ve currently customized my prompt to show my user, hostname (if I am in an ssh session), my current directory and its write status, git repository information, execution time, and exit status.

Here are a couple examples:

bdavis /www :
bdavis /var :
bdavis ~ (master) 1.05s :
bdavis ~/.config (master ⚡) 128 :

At the end of the day, the out-of-the-box features make fish great. You can probably pull off most of fish’s functionality with a lot of configuration in some other shells, but honestly, why waste your time? Get more stuff done.

Panic’s Terminal Theme

Billy’s dotfiles