我正在做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的框架中工作,这使得用户给出的缓冲区最新并在那里插入一个字符串。如果它恢复缓冲区,它将撤消插入。显然它没有,但是“恢复缓冲区”是什么意思呢?
答案 0 :(得分:1)
这是一个简单的函数来说明保存缓冲区意味着什么:
(defun foo ()
(interactive)
(insert "foo")
(save-excursion
(set-buffer "*scratch*")
(insert "bar")))
从不是*scratch
的缓冲区中调用此方法。它将插入当前缓冲区,
切换到*scratch*
,插入那里。事情就是这样:save-excursion
恢复
通过切换*scratch*
来缓冲,所以你回到了你开始的缓冲区。