Elisp 是不是;“恢复”;在保存偏移中,是否再次恢复当前缓冲区的内容?

Elisp 是不是;“恢复”;在保存偏移中,是否再次恢复当前缓冲区的内容?,elisp,Elisp,我现在正在做ELISP教程,不确定标准ELISP函数保存偏移(或同等保存当前缓冲区)中“恢复”的含义。这可能只是因为我不是以英语为母语的人,不知道“恢复”有多强或有多弱 假设当前缓冲区是A,我在保存偏移环境中执行一个操作,其中A被更改,例如插入一个字符串,我希望保存偏移恢复A,所以撤消该操作中的更改 我不理解的实际问题是从复制到缓冲区的示例: (defun copy-to-buffer (buffer start end) (interactive "BCopy to buffer: \nr

我现在正在做ELISP教程,不确定标准ELISP函数保存偏移(或同等保存当前缓冲区)中“恢复”的含义。这可能只是因为我不是以英语为母语的人,不知道“恢复”有多强或有多弱

假设当前缓冲区是A,我在保存偏移环境中执行一个操作,其中A被更改,例如插入一个字符串,我希望保存偏移恢复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)))))

最后一次保存偏移在with current buffer的帧中工作,它使用户给定的缓冲区成为当前缓冲区,并在其中插入一个字符串。如果恢复缓冲区,则会撤消插入。显然不是,但是“恢复缓冲区”意味着什么呢

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

(defun foo ()
  (interactive)
  (insert "foo")
  (save-excursion
    (set-buffer "*scratch*")
    (insert "bar")))
从不是
*scratch
的缓冲区调用此函数。它将插入当前缓冲区, 切换到
*scratch*
,插入其中。还有一件事:
保存游览
恢复
*scratch*
切换到buffer,这样您就回到了开始的buffer中

Thx,我尝试了你的问题,还将(insert“foo”)int切换为save-shiftion。所以“还原”只是说“重新设置当前值”。
save-shiftion
的文档相当明确(Ctrl-h f save-shiftion):“保存点、标记和当前缓冲区;执行主体;还原这些内容。”