Se eu estiver apenas rolando algumas linhas de onde estou atualmente, posso usar isso para rolar a janela sem mover o ponto:
(defun scroll-in-place (scroll-up)
"Scroll window up (or down) without moving point (if possible).
SCROLL-Up is non-nil to scroll up one line, nil to scroll down."
(interactive)
(let ((pos (point))
(col (current-column))
(up-or-down (if scroll-up 1 -1)))
(scroll-up up-or-down)
(if (pos-visible-in-window-p pos)
(goto-char pos)
(if (or (eq last-command 'next-line)
(eq last-command 'previous-line))
(move-to-column temporary-goal-column)
(move-to-column col)
(setq temporary-goal-column col))
(setq this-command 'next-line))))
;;;; ------------------------------------------------------------------------
(defun scroll-up-in-place ()
"Scroll window up without moving point (if possible)."
(interactive)
(scroll-in-place t))
;;;; ------------------------------------------------------------------------
(defun scroll-down-in-place ()
"Scroll window up without moving point (if possible)."
(interactive)
(scroll-in-place nil))
(global-set-key (read-kbd-macro "M-<down>") 'scroll-up-in-place)
(global-set-key (read-kbd-macro "M-<up>") 'scroll-down-in-place)
Se eu estou indo para uma seção completamente diferente de um arquivo (ou para um arquivo diferente), às vezes eu uso breadcrumb
embora existam muitos outros pacotes que fazem coisas semelhantes.
Se eu precisar visualizar visualmente duas áreas de código ao mesmo tempo, dividirei o quadro horizontalmente em duas janelas e depois descartarei a segunda janela quando terminar.
Na maioria das vezes, eu uso apenas dois quadros, sendo um deles o meu quadro de trabalho atual e o outro é o meu quadro de referência, usado para pular os mesmos arquivos ou outros arquivos.