#emacs #elisp #emacs23 #dot-emacs
#emacs #elisp #emacs23 #точка-emacs
Вопрос:
Я хочу, чтобы emacs добавлял местоположение последнего редактирования в кольцо меток, чтобы я мог вернуться к предыдущим местоположениям редактирования.
В идеале это позволило бы отмечать только одно местоположение редактирования в строке. Когда я редактирую другую строку, последнее место редактирования в этой строке будет добавлено в кольцо, и так далее.
Я не знаком с Lisp, чтобы реализовать это самостоятельно. Если кто-нибудь знает о плагине или может любезно предоставить решение, это было бы здорово! 🙂
Ответ №1:
Вы можете установить пакет goto-last-change, который позволяет последовательно переходить к позициям отмены буфера (местоположениям последнего редактирования).
Комментарии:
1. Спасибо, Олег. Я действительно использую goto-last-change. Это здорово, но за пределами самого последнего местоположения редактирования оно ведет себя не так, как мне хотелось бы.
Ответ №2:
Сеанс.el предоставляет эту функциональность, привязанную к «C-x C-/» или session-jump-to-last-change
.
Сеанс выполняет это для каждого буфера. Я не знаю ни о чем, что делает это глобально.
Комментарии:
1. хм .. по какой-то причине на »
C-x C-/
» я получаюC-x C-_ is undefined
, но после повторной привязки его к другому ключу, похоже, это работает. Я попробую это сделать в ближайшие несколько дней. Спасибо!
Ответ №3:
Я реализую аналогичную функцию, записывая местоположения последнего редактирования 2 файлов (не для каждого буфера) и циклически меняя их по запросу. Что-то вроде того, как это делает eclipse (но менее мощное, записывается только 2 файла)
emacs-местоположение последнего редактирования
код:
;;; record two different file's last change. cycle them
(defvar feng-last-change-pos1 nil)
(defvar feng-last-change-pos2 nil)
(defun feng-swap-last-changes ()
(when feng-last-change-pos2
(let ((tmp feng-last-change-pos2))
(setf feng-last-change-pos2 feng-last-change-pos1
feng-last-change-pos1 tmp))))
(defun feng-goto-last-change ()
(interactive)
(when feng-last-change-pos1
(let* ((buffer (find-file-noselect (car feng-last-change-pos1)))
(win (get-buffer-window buffer)))
(if win
(select-window win)
(switch-to-buffer-other-window buffer))
(goto-char (cdr feng-last-change-pos1))
(feng-swap-last-changes))))
(defun feng-buffer-change-hook (beg end len)
(let ((bfn (buffer-file-name))
(file (car feng-last-change-pos1)))
(when bfn
(if (or (not file) (equal bfn file)) ;; change the same file
(setq feng-last-change-pos1 (cons bfn end))
(progn (setq feng-last-change-pos2 (cons bfn end))
(feng-swap-last-changes))))))
(add-hook 'after-change-functions 'feng-buffer-change-hook)
;;; just quick to reach
(global-set-key (kbd "M-`") 'feng-goto-last-change)