3

emacsに最後の編集場所をマークリングに追加して、前の編集場所に戻ることができるようにしたい。

理想的には、これは1行に1つの編集場所のみをマークします。別の行を編集すると、その行の最後の編集場所がリングに追加され、以下同様に続きます。

私はこれを自分で実装するためのLispに精通していません。誰かがプラグインを知っているか、親切に素晴らしい解決策を提供できるなら!:)

4

3 に答える 3

3

パッケージgoto-last-changeをインストールすると、バッファーの元に戻す位置(最後の編集場所)に順番にジャンプできます。

于 2011-11-12T07:41:42.673 に答える
1

Session.elは、「CxC-/」またはにバインドされたこの機能を提供しますsession-jump-to-last-change

セッションはバッファごとにそれを行います。私はそれを世界的に行っていることを知りません。

于 2011-11-12T14:10:15.983 に答える
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)
于 2011-12-25T00:27:27.893 に答える