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 categories:
- 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 point1 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-next without asking for a character to look for.
symbol-overlay works on all the buffer content, so in this particular
case is quicker than Swiper too.