If you spend a lot of time in the terminal, most likely you will have several terminal windows open. Zsh has great support for command line histories. The history is unique and shared through all the different instances.
Zsh has incorporated features from nearly every other shell. Often without regard for how the feature will interact with existing features. This has lead to a multitude of configurable options that make predicting the behavior of the shell extremely difficult.
fish suggests commands as you type, based on command history, completions, and valid file paths. As you type commands, you will see a completion offered after the cursor, in a muted gray color (which can be changed with the fish_color_autosuggestion variable).
Although fish tries not to break POSIX compatibility without a good reason, and despite efforts to implement a compatibility mechanism, you can face some issues if POSIX compatibility is expected/required. Though, enthusiasts fix these cases. For example, add set shell=sh in your .vimrc to s...
Xonsh uses a syntax which is a superset of Python 3.4 plus some additional shell primitives. Because of the similarity to Python, which is famously an easy to understand programming language, the syntax of Xonsh is pretty easy to grasp too, even more so for Python programmers.
There's a number of paper cuts that have yet to be addressed. It's been progressing very rapidly though. Some features have yet to be implemented, some logic bugs have yet to be fixed, and it's not been tested much in the wild. Very early in it's life as of 2017.