保存 - 偏移中的“恢复”是否会再次恢复当前缓冲区的内容?

时间:2013-12-20 09:45:08

标签: elisp

我正在做ELISP - Tutorial,并且不确定标准elisp函数save-excursion(或同样保存当前缓冲区)中“restore”的含义。这可能只是因为我不是以英语为母语的人,也不知道“恢复”的强弱程度。

假设当前缓冲区是A,我在save-excursion环境中执行A更改的操作,例如插入的字符串,我希望save excursion恢复A,因此撤消该操作中的更改。

我不理解的实际问题是从复制到缓冲的例子:

(defun copy-to-buffer (buffer start end)
  (interactive "BCopy to buffer: \nr")
   (let ((oldbuf (current-buffer)))
    (with-current-buffer (get-buffer-create buffer)
      (barf-if-buffer-read-only)
      (erase-buffer)
      (save-excursion
        (insert-buffer-substring oldbuf start end)))))

最后的save-excursion在with-current-buffer的框架中工作,这使得用户给出的缓冲区最新并在那里插入一个字符串。如果它恢复缓冲区,它将撤消插入。显然它没有,但是“恢复缓冲区”是什么意思呢?

1 个答案:

答案 0 :(得分:1)

这是一个简单的函数来说明保存缓冲区意味着什么:

(defun foo ()
  (interactive)
  (insert "foo")
  (save-excursion
    (set-buffer "*scratch*")
    (insert "bar")))

从不是*scratch的缓冲区中调用此方法。它将插入当前缓冲区, 切换到*scratch*,插入那里。事情就是这样:save-excursion恢复 通过切换*scratch*来缓冲,所以你回到了你开始的缓冲区。