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

Contact us to reimagine your business

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.