Ivy reverse-i-search09 Jul 2019
I'm sure many are aware of the C-r functionality in bash (a whole lot of Emacs bindings are valid in bash and do the same thing). I also like the quirky Emacs-style prompt, that uses a backquote to open and a straight quote to close a your quoted input:
So when you want to
cd to somewhere where you were before you do C-r
cd. And then the
C-r "roulette" begins: you keep pressing C-r over and over, in the hopes to find
what you were looking for.
Getting better history completion with Ivy
Ivy improves the "roulette" situation in two ways:
- You get an overview of the matching candidates and their count,
- You can quickly narrow down the candidates with fuzzy matching.
Here's the basic setup to enable C-r completion using ivy:
(define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history) (define-key shell-mode-map (kbd "C-r") 'counsel-shell-history)
The first key binding is also part of
counsel-mode, while the second needs to be set up separately,
shell-mode was loaded.
And here's how
counsel-shell-history looks like:
The cool thing is that
ivy-reverse-i-search applies to any Ivy command, not just for shell
command completion. I find it especially useful for:
Recent improvement: delete history items
While searching with regexes is great, it's not so great when the old stuff that we won't ever need
gets in the way. So now you can delete it with C-k. Since C-k also has to
ivy-kill-line, the history deleting behavior will only come into effect when the point is
at the end of the line (so that
ivy-kill-line does not make sense anyway).
This way, your typos don't stay around to haunt you.
I hope you'll find
ivy-reverse-i-search a useful boost to your completion needs. Happy hacking!