I like the idea of fish, but I've had issues with other programs assuming things about my shell. Like vim and I think even other programs. There's something fish doesn't do, that other shells like bash and zsh do, that breaks other programs. I can't remember the specifics, but fish breaks stuff for me when I tried it, and I tried it pretty recently.
I had similar problems, and found a work around that works great for me:
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).
Yes, fish is not bourne shell compatible and never will be.
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
Anything I have issues with I simply run under bash. I've had very few problems, and use it on my work machine (where I live in tmux and vim).
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).
There are two problems I've found that prevent me from using fish more:
1. <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.
What problems are you facing while using virtualenv ? I use fish with virtualenv and everything seems fine.( You need to source activate.fish to activate virtualenv on fish. )
fish's syntax is not POSIX compliant (because fish tries to simplify syntax), so at times it breaks other programs which depends on POSIX syntax. But you can always find workarounds for those problems. For e.g. see the discussion at https://github.com/fish-shell/fish-shell/issues/921 . Let us know your problem and we can help you with migrating.
I actually have an even more complete version of this which allows changing the Go shell cleanly. Dump https://gist.github.com/bpollack/7197532 in your .config/fish/functions directory and you should be good to go.