Emacs - 在编辑位置设置标记

3
我希望emacs可以将最后一次编辑的位置添加到标记环中,这样我就可以跳回到以前的编辑位置。
理想情况下,每行只会标记一个编辑位置。当我编辑另一行时,该行上的最后一个编辑位置将被添加到环中,依此类推。
我不熟悉Lisp语言以实现此功能。如果有人知道相应的插件或者能够提供一种解决方案,那就太好了! :)
3个回答

3
您可以安装一个名为goto-last-change的软件包,它可以使您按顺序跳转到缓冲区撤销位置(即最后的编辑位置)。

谢谢Oleg。我确实使用goto-last-change。它很棒,但是在最后一个编辑位置之外的行为不符合我的期望。 - armandino

1

Session.el 提供了将此功能绑定到“C-x C- /”或 session-jump-to-last-change 的功能。

Session会在每个缓冲区中执行。我不知道是否有任何东西可以全局执行此操作。


1
嗯...由于某些原因,在“C-x C-/”上我得到了“C-x C-_ is undefined”但重新绑定到另一个键后似乎可以工作。接下来的几天我会尝试一下。谢谢! - armandino

0
我实现了一个类似的功能,通过记录2个文件的最后编辑位置(不是每个缓冲区),并在请求时循环它们。有点像Eclipse的做法(但不够强大,只记录2个文件)。

emacs-last-edit-location

代码:

;;; 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接