Fish shell, a popular user-friendly command-line shell, has announced version 4.2, a new release that builds on the 4.0 series. Among the most visible improvements is an upgrade to history-based autosuggestions, which now properly handle multi-line commands.
Fish 4.2 also improves how prompts are managed: transient prompts that contain more lines than the final one are now cleared properly, preventing visual clutter on screen. Similarly, the shell now hides parts of a multi-line prompt that have scrolled out of view, eliminating duplicated lines after repainting.



This is by no means complete, but the features that I value would be:
<Tab>cycles though completions as it should instead of duplicating the prompt.git <Tab>it shows a short message describing what the command does. JJ goes further:jj diff -r <Tab>shows part of the commit message for the offered commits.<C-E>or<Right>. This completion is also directory-aware and can usually avoid suggesting commands with paths to files that don’t exist. In practice I find that it’s really good at suggesting the command I actually want to run, to the point that I rarely invoke FZF anymore.You can get most of these with liberal use of shell options, installing blesh, or alternatively installing zsh with a bunch of plugins, but Fish just has all of them out of the box. You don’t even need
bash-completions.It has a reputation of being very difficult from the past when it didn’t have
&&/||but I think today plenty of Linux users would not even notice. The most notable remaining differences are setting variables (requires thesetbuiltin unless used to modify the environment for a single command), control structures (irrelevant in interactive use) and lack of!!(but you can make an abbreviation to bring it back).Any chance you could give a simple explainer on how to set up a !! abbreviation in fish?
I’m a fairly non-technical fish user and every time I’ve tried to figure out how to do it I’ve ended up giving up 😅
If you don’t know off the top of your head thats fine, but it seemed worth an ask ☺️
I have this in my config:
I believe I originally got this implementation from the GitHub issues. The key is that abbreviations can also call functions, which can in turn index into the
historylist. We also need to specify that we want the expansion even if we’re in an argument to another command, such as insudo !!.