В Emacs, C-u C-SPC
"перейдет к метке и установит метку от положения, вытолканного от локального кольца метки". Существует ли способ пойти противоположным путем вокруг кольца метки? Скажите, что Вы несколько раз вводили C-u C-SPC и хотите вернуться к метке, которую Вы видели, не идя полностью вокруг кольца.
Это не делает именно то, о чем вы просите, но, возможно, стоит поискать пакет под названием marker-visit.el, который позволяет вам перемещаться по меткам в текущем буфере в "порядке позиций буфера". Из этого файла:
;;; Commentary:
;; This file provides a simple way to navigate among marks in a
;; buffer. C-u C-SPC is similar, but takes you haphazardly around the
;; buffer. Setting bookmarks is a lot of extra work if you just want
;; to jump around your buffer quickly; plus, you have to come up with
;; a name for every bookmark.
;; All the marks you've left while editing a buffer serve as bread
;; crumb trails of areas in the buffer you've edited. It is
;; convenient to navigate back and forth among these marks in order.
;; This file provides two methods to do just that, marker-visit-prev
;; and marker-visit-next. These two functions will take you, from
;; point, to the nearest mark in either direction. The function
;; marker-visit-truncate-mark-ring will truncate the mark ring.
;; The marks you can visit in a buffer consist of: "the mark" plus the
;; contents of the mark-ring.
Я привязываю [S-up] и [S-down] к marker-visit-prev и marker-visit-next соответственно.
Если вы действительно хотите/необходимо перемещаться в том порядке, в котором сейчас находится кольцо меток, то вы можете получить результат, рассмотрев функции pop-to-mark-command и pop-mark и реализовав свои собственные версии для поворота кольца меток в обратном направлении.
Вы пробовали просмотреть-убить-кольцо
?
Загрузите его из Emacswiki , поместите его в свой путь загрузки, а затем добавьте это в свой emacs-conf:
(when (require 'browse-kill-ring nil 'noerror)
(browse-kill-ring-default-keybindings))
Затем, когда вы нажмете My, вам будет показано кольцо уничтожения, ищите его как обычно текст и т. д. . Действительно удобно. Есть также более практическая информация по emacs-fu о том, как использовать browse-kill-ring
Вот функция для этого:
(defun unpop-to-mark-command ()
"Unpop off mark ring into the buffer's actual mark.
Does not set point. Does nothing if mark ring is empty."
(interactive)
(let ((num-times (if (equal last-command 'pop-to-mark-command) 2
(if (equal last-command 'unpop-to-mark-command) 1
(error "Previous command was not a (un)pop-to-mark-command")))))
(dotimes (x num-times)
(when mark-ring
(setq mark-ring (cons (copy-marker (mark-marker)) mark-ring))
(set-marker (mark-marker) (+ 0 (car (last mark-ring))) (current-buffer))
(when (null (mark t)) (ding))
(setq mark-ring (nbutlast mark-ring))
(goto-char (mark t)))
(deactivate-mark))))
В руководстве сказано следующее:
Переменная
mark-ring-max
определяет максимальное количество записи, которые нужно оставить в кольце отметок. Если что существует много записей и еще один один толкается, самый ранний в список отброшен. Повторение `C-u C- 'прокручивает позиции в настоящее время на ринге.
Я предлагаю вам использовать это, чтобы указать размер кольца меток (до 3 или 4, у меня сейчас 16). Тогда вы сможете перемещаться по нему намного быстрее, используя префиксы.
Также:
Если вы хотите вернуться к одно и то же место снова и снова, знак кольцо может оказаться недостаточно удобным. Если так что вы можете записать позицию в зарегистрируйтесь для последующего поиска (* примечание Сохранение позиций в регистрах: RegPos.).