2011-11-12 51 views
3

我希望emacs將最後一個編輯位置添加到標記環中,以便我可以跳回到之前的編輯位置。Emacs - 編輯位置上的設置標記

理想情況下,這隻會標記一個每行編輯位置。當我編輯另一行時,該行上的最後編輯位置將被添加到環中,等等。

我不熟悉Lisp自己實現這個。如果有人知道插件或可以提供一個很棒的解決方案! :)

回答

1

Session.el提供了綁定到「C-x C- /」或session-jump-to-last-change的此功能。

Session dos it per buffer。我不知道全球任何事情。

+1

hmm ..因爲某些原因在「'C-x C- /'」我得到了'C-x C-_未定義,但是在將它重新綁定到另一個鍵後,它似乎工作。接下來的幾天我會試試這個。謝謝! – armandino

3

您可以安裝一個包goto-last-change,它允許您連續跳轉到緩衝區撤消位置(最後編輯位置)。

+0

感謝奧列格。我確實使用goto-last-change。這很棒,但它不像我最近編輯的位置那樣行事。 – armandino

0

我通過記錄2個文件的最後編輯位置(不是每個緩衝區)來執行類似的功能,並在請求時循環它們。有點像日食怎麼做(但不那麼強大,只有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)