bash is configured as my default shell. So every program that runs my default shell and just assumes it can use POSIX syntax, gets what it wants (even though it should really just use /bin/sh).
My terminal on the other hand is configured to ignore my default shell and run fish instead.
I also have a line in my .bash_profile (meaning it only runs for login shells) that checks whether it's running in a virtual terminal and in that case exec's fish in a new tmux (because tmux is a terminal emulator, which means that any bash instances within it won't know they are in a virtual terminal and behave like a normal bash).
Fish is as the name (Friendly Interactive SHell) suggests an interactive shell. You should just set vim/emacs/whatever to use a bourne-compatible shell. It's one line of vim config: set shell=/bin/sh
Edit: I'm running a pre-release of 2.0.0, which I modified to time every command. I was extremely impressed at how simple it was for me to add (not my usual language).
set -x GOPATH $HOME/go
set -x PATH $GOPATH/bin $PATH1. <strike>Fish syntax breaks virtualenv</strike> (Edit: Okay, apparently this isn't actually a problem).
2. Fish does not have the equivalent of 'disown' in bash. This is fine if you exit the parent shell normally, but not if you send SIGKILL, which my window manager (wmii and i3) does.
You might want to try virtualfish [1]
. bin/activate.fish# This file must be used with ". bin/activate.fish" from fish (http://fishshell.org)*