Ivy reverse-i-search
09 Jul 2019Introduction
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,
after 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:
counsel-find-file
eval-expression
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
serve as 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.
Outro
I hope you'll find ivy-reverse-i-search
a useful boost to your completion needs. Happy hacking!