I switched to fish a bit more than a year ago. I used to have a script with shorthands of frequently used long commands because I just couldn't get to them easily enough with bash's ctrl+r.
Now with fish, I don't need that anymore. Pressing up a few times always gets what I need and I don't need to come up with names for shorthands. (If I really want to name it, I can always add a # "tag" at the end. A trick I picked up from one of the post here (I can't remember which one).)
Although sometimes I do wish there was a keyword search feature treating space as a separator for what I've already typed. One frequent case is when I'm looking for `rsync --bunch --of --options user@server:path other_path`. I remember `rsync` and I remember `user@server` (or one of the two paths) but not the rest (and I also ssh, sftp, scp, etc to the same place a lot).
Personally, if POSIX compliance wasn't mandatory I'd go one step further and go with Xonsh, which offers more tangible benefits.
As it is, I can add a couple of plugins to zsh with zgen and get most of what makes fish interesting. They're great ideas, but there's no need to sacrifice so much for them.
Fish' auto completion is what's been keeping me on it all these years. I tried to switch to zsh and hack some autocomplete on, but it didn't work nearly as well.
Now with fish, I don't need that anymore. Pressing up a few times always gets what I need and I don't need to come up with names for shorthands. (If I really want to name it, I can always add a # "tag" at the end. A trick I picked up from one of the post here (I can't remember which one).)
Although sometimes I do wish there was a keyword search feature treating space as a separator for what I've already typed. One frequent case is when I'm looking for `rsync --bunch --of --options user@server:path other_path`. I remember `rsync` and I remember `user@server` (or one of the two paths) but not the rest (and I also ssh, sftp, scp, etc to the same place a lot).