这里有两个命令可以向前删除一个句子(不保存到 kill ring)。第一个基于 EmacsWiki Elisp Cookbook 中的一个示例,后者与前者类似,只是对 save-excursion 的调用位于不同的位置。
;; good with undo
(defun my-test-1 ()
(interactive)
(delete-region (point)
(save-excursion
(forward-sentence 1)
(point))))
;; bad with undo
(defun my-test-2 ()
(interactive)
(save-excursion
(delete-region (point)
(progn
(forward-sentence 1)
(point)))))
当我运行第一个命令然后撤消它时,点最终出现在正确的位置,而第二个命令则不是这种情况。为什么会发生这种差异?