76 lines
2.6 KiB
Markdown
76 lines
2.6 KiB
Markdown
+++
|
|
date = "2014-11-20"
|
|
title = "Why I dropped fish in favour of Zsh"
|
|
tags = ["zsh", "fish"]
|
|
description = "Developers are religious about two things: their editor and their shell. Many will say fish is the best there is, but after a few months of fish, I'm back to Zsh."
|
|
slug = "why-i-dropped-fish-in-favour-of-zsh"
|
|
+++
|
|
Developers are religious about two things: their editor and their shell.
|
|
|
|
After getting multiple recommendations from friends and co-workers I
|
|
gave [fish][1] a try. It lists several benefits over other shells, among
|
|
other there's autosuggetions, colour support and web based configuration.
|
|
|
|
Installing it on a Mac is easy with [Homebrew][2], so I figured why not
|
|
give it a fair try.
|
|
|
|
And yes, fish has its benefits. I used the web based configurator. Once.
|
|
The only feature that really stood out to me was the autosuggestions and
|
|
more notably the fact that fish will suggest commonly used commands based
|
|
on the directory you're currently in.
|
|
|
|
Still, the most annoying thing is that fish is not POSIX compatible.
|
|
Although I'm not a purist that insists on POSIX compatibility, it imposed
|
|
some practical limitations.
|
|
|
|
## Environment variables
|
|
|
|
The first and most annoying thing is environment variables. I'm not talking
|
|
about the globally set variables, but those you use to run a command once.
|
|
|
|
Normally I'd do something like this:
|
|
|
|
TIME_COP=2016-02-24 rake app:send_daily_notifications
|
|
|
|
Well, that doesn't work in fish as it needs you to explicitly run the `env` command:
|
|
|
|
env TIME_COP=2016-02-24 rake app:send_daily_notifications
|
|
|
|
It's a subtle difference, but if you're used to the old syntax and have
|
|
quite some documentation with snippets like this, it's quite a nuisance.
|
|
|
|
## && vs &
|
|
|
|
Running a second command conditionally is a construct I use often:
|
|
|
|
./analyse_data.rb && rake app:send_daily_notifications
|
|
|
|
If `./analyse_data.rb` fails (e..g it has a non-zero return value), then
|
|
the supplied rake task will not be executed. Again, this is something I
|
|
commonly use.
|
|
|
|
Fish on the other hand uses a single `&`, the `&&` operation is invalid.
|
|
|
|
## Incompatibility with Vim
|
|
|
|
You'll need to give Vim some extra love and attention when you're running
|
|
fish. Namely, you'll need to explicitly tell Vim to *not* use fish, but bash
|
|
instead.
|
|
|
|
It's a simple fix, but one that should not be necessary.
|
|
|
|
## Back to Zsh
|
|
|
|
The _issues_ I have with fish are minimal and due to my own personal
|
|
preference. I think fish is a nice shell, but it just doesn't fit me.
|
|
|
|
So, back to Zsh! But no more Oh-My-Zsh-crap, please! More on how I've
|
|
setup Vim/Tmux/Zsh in a later post.
|
|
|
|
|
|
|
|
[1]: http://fishshell.com
|
|
[2]: http://brew.sh
|
|
|
|
|