我希望emacs将最后一个编辑位置添加到标记环,这样我就可以跳回以前的编辑位置。
理想情况下,每行只会标记一个编辑位置。当我编辑另一行时,该行的最后一个编辑位置将被添加到环中,依此类推。
我不熟悉Lisp自己实现这个。如果有人知道插件或者可以提供一个很棒的解决方案! :)
答案 0 :(得分:3)
您可以安装包goto-last-change,它允许您按顺序跳转到缓冲区撤消位置(最后编辑位置)。
答案 1 :(得分:1)
Session.el提供此功能绑定到“C-x C- /”或session-jump-to-last-change
。
每个缓冲区的会话dos。我不知道在全球范围内做任何事情。
答案 2 :(得分:0)
我通过记录2个文件的最后编辑位置(不是每个缓冲区)来实现类似的功能,并在请求时循环它们。有点像eclipse如何(但功能不强,只记录了2个文件)
代码:
;;; 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)