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.
A lot of Mac users either don't know they're using zsh by default now or simply don't take advantage of it's scripting language/featureset. For those people, I think fish makes a compelling upgrade. No log-in, just a slightly nicer interactive terminal prompt.
fish-shell: https://github.com/fish-shell/fish-shell/
ranger: https://github.com/ranger/ranger/
tig: https://github.com/jonas/tig/
ag or rg: https://github.com/ggreer/the_silver_searcher https://github.com/BurntSushi/ripgrep
And all my configurations, especially for fish-shell: http://github.com/c02y/dotfiles
Source code: https://github.com/fish-shell/fish-shell
Right now I have 8 terminals open, some tabbed, some not, Sometimes I can have over twice as many. Many of them sit untouched on an Awesome workspace for days ready for me to come back to whenever I need them. This isn't a issue since their memory footprint is almost non-existent on pretty much any machine. Could I get away with this if I had to run an instance of Node + Chromium per terminal window? Is Black Screen one step ahead of me and it'll reuse an already running instance and open up another window? Do I want all my terminal instances to be managed by a single node process? Despite my reservations, still going to give this a go.
On a side note, anyone looking for a slightly more useful shell that is still very lightweight: check out fish: https://github.com/fish-shell/fish-shell