I quit fish because I missed being able to `sudo !!` to rerun the previous command with sudo. There's an alternative way to do it (something like up arrow, ctrl-i, "sudo", enter), but I can never remember it when I need it, which is not often enough to stay in my head, but often enough to be come quite annoying.
This post has prompted me to give fish another go, so I looked into it again.
It looks like the abbreviation system can now (since March this year) help you with !! (https://fishshell.com/docs/current/cmds/abbr.html even gives it as an example)
I also use `!$` (`vim script.py` and then `python !$` or `git commit !$`) but the parser rejects `!$` before it can be rewritten by the abbreviation system. [edit: https://superuser.com/a/1762626 points out that if you add a space before hitting enter then it works fine, so I'm guessing it's just a bug, and I should go with d below]
Options seem to include:
a) make a !$ replacement that is not illegal and change your muscle memory `\$` or `!\$` or `!@` or `!%`
b) use a keybinding for !$ as suggested in https://github.com/fish-shell/fish-shell/issues/288
c) some combination of a and b (e.g. make a `!\$` abbreviation and then make a binding so that if you type !$ it replaces it with `!\$` so that it gets past the parser without expliding)
d) patch the parser to allow !$ as a special case if there is an abbr for it.
I just tried b but it's pretty jarring. I think I might go with c instead.
I'm actually feeling quite positive about this now.
There is something I've been wanting to add to bash since forever, which is something to help me cd into a repo that I just cloned (e.g. `git clone https://github.com/fish-shell/fish-shell` then `cd !/` could expand to `cd fish-shell`).
Exciting times.