Emacs: Jump to Previous Position

By Xah Lee. Date: . Last updated: .

Often, you need to go to a previous position in a buffer. For example, you are editing a big source code that's few hundred lines. You want to look at some function's definition, but then you want to return to the current position.

Emacs has a buffer mark ring and global mark ring that records mark positions and lets you jump to it.

First, press 【Ctrl+Space Ctrl+Space】 to push current position into mark ring.

There are 3 ways to jump cursor to a previous position.

Call any one of the above repeatedly will return cursor to the position you began.

Following are details.

Move Cursor to Previous Mark in Current Buffer

  1. First, mark the position you want to jump to later, by Alt+x set-mark-commandCtrl+Space】. (press 【Ctrl+Space】 a second time to remove the highlight (or press 【Ctrl+g】).)
  2. Scroll down a few times.
  3. Press 【Ctrl+u Ctrl+Space】 to jump to previous mark in current buffer.

Move Cursor to Previous Mark, Any Buffer

Alt+x pop-global-markCtrl+x Ctrl+Space】. This one cycles global-mark-ring.


Alt+x exchange-point-and-markCtrl+x Ctrl+x

This moves cursor to previously marked position, and activate selection (highlight it)

This is most useful when you already have a selection, and want to extend or shrink the other end.

mark-ring, global-mark-ring, pop-global-mark

Emacs store cursor positions and let you jump to it quickly.

There are 2 mark rings:

by default, each mark ring keep 16 positions. As new mark is set, oldest is removed.

you can make it store less positions for better use of jump.

(setq mark-ring-max 6)
(setq global-mark-ring-max 6)

Tip: Single Key to Cycle Thru Marks

You can set single key to cycle thru marks, such as F7.

But you need to define a wrapper command first.

(defun xah-pop-local-mark-ring ()
  "Move cursor to last mark position of current buffer.
Call this repeatedly will cycle all positions in `mark-ring'.
URL `http://ergoemacs.org/emacs/emacs_jump_to_previous_position.html'
Version 2016-04-04"
  (set-mark-command t))
(global-set-key (kbd "<f7>") 'pop-global-mark)
(global-set-key (kbd "<f8>") 'xah-pop-local-mark-ring)

[see Emacs: How to Define Keys]

Emacs Efficiency Topic

  1. Keyboard Macro
  2. Completion
  3. Abbrev Mode
  4. Use Alias for Fast M-x
  5. Jump to Previous Mark
  6. Repeat Last Prompted Command
  7. Tips on Long Term Emacs Productivity

If you have a question, put $5 at patreon and message me.
Or Buy Xah Emacs Tutorial
Or buy a nice keyboard: Best Keyboards for Emacs


Emacs Lisp