The best thing about fish is probably the lateral line, which sort of like ears for underwater that enable fish to sense and locate predators even in dark or murky conditions.
The best thing about the fish command-line shell, on the other hand, has to be
its “fuzzy” completions. In most other shells (like Microsoft PowerShell, which
I use every day at work), you can tab-complete a filename like
blog_post_idea.md by typing blog (the first part of the filename) and
pressing Tab. If there are multiple matches, you use the arrow keys
to scroll through them until you get the one you want.
This works fine if you put the most-unique part of your filenames at the
beginning. But I like to begin my filenames with ISO
dates, so to tab-complete
2024-03-06_blog_post_idea.md in PowerShell, I have to type 2024 and then jab
the arrow key a bunch of times, which is like using a phone book that is sorted
by phone number. In fish, blogpost (even without the underscore) will
tab-complete to 2024-03-06_blog_post_idea.md.
Similar completions work for the options of most command-line programs, and it’s (relatively) easy to extend the built-in completions with your own configuration files (but I’ve never needed to).