Last time I shared my preferred choice for buffer switching, so let’s keep jumping around. The House of Pain reference is a bit tacky, I know, but 90s nostalgia is still flying pretty high from what I’ve heard.
Quickly moving in a buffer is something every Emacs knight do multiple times a day. I distinguish in-buffer jumps in two tags:
- jumps that encompass all the buffer content
- jumps limited to what is currently visible
The first movements are covered by Oleh Krehel’s Swiper, but I am more interested in the second kind of jumps this time. There are plenty of solutions both bundled in Emacs (e.g., pop/mark commands) and in the wild. My favourite is Avy, again from Oleh Krehel.
(use-package avy-jump ; Jump to characters in buffers
:ensure avy
:bind (("C-j" . avy-goto-char-in-line)
("M-j" . avy-goto-char)))
As it always happens with Oleh’s packages, avy
is well-documented, easy to
extend, and full of useful commands. I only added bindings for the ones I use
the most, and I really use these two all the time.
avy-goto-char
allows me to move anywhere following the character I am after.
It’s quicker than typing the whole candidate in Swiper, and obviously better
than manually moving
point
with C-p
/C-n
or, worse, the arrow keys.
avy-goto-char-in-line
behaves in much the same way, but it is limited to the
current line. If you remember iy-go-to-char
mentioned years ago on Emacs
Rocks, this is Oleh’s own variant.
Both commands push point to the mark-ring
, so the default Emacs key binding
C-u C-SPC
takes you back to your original position.
However, there is an even quicker alternative when I want to jump between occurrences of the symbol where point currently is, which turns out to be pretty handy when coding.
(use-package symbol-overlay ; Highlight symbols
:ensure t
:bind (:map symbol-overlay-mode-map
("M-h" . symbol-overlay-put)
("M-n" . symbol-overlay-jump-next)
("M-p" . symbol-overlay-jump-prev))
:hook ((conf-mode . symbol-overlay-mode)
(html-mode . symbol-overlay-mode)
(prog-mode . symbol-overlay-mode)
(yaml-mode . symbol-overlay-mode)))
Symbol Overlay not only highlights all the occurrences of the current symbol,
but it lets you move quickly among them with symbol-overlay-jump-prev
and
symbol-overlay-jump-next
without asking for a character to look for.
Moreover, Symbol Overlay works on all the buffer content, so in this particular case is quicker than Swiper too.