当您输入命令 C - / 时,Emacs会将您最近更改的某些部分撤消到缓冲区。当你再次输入 C - / 时,它会撤消另一部分工作。
我已经阅读了Emacs manual entry on Undo,但它究竟是如何运作的却模糊不清。手册说“连续字符插入命令通常组合在一起成为一个撤销记录”,但它没有解释它如何决定构成一个组的字符插入命令的数量。它放在一个组中的字符数似乎是随机的。
任何人都可以解释Emacs用于将字符分组为撤消记录的算法吗?
答案 0 :(得分:34)
设置撤消边界的逻辑主要在self-insert-command
中,在cmds.c
中实现。你必须阅读完整故事的代码,但基本上是:
internal_self_insert
确定)会导致立即添加撤消边界,并重置字符计数。阅读代码,看起来好像是:(1)在overwrite-mode
中,如果你用一个宽度不同的字符覆盖一个字符,例如在标签上打字; (2)如果您插入的字符导致缩写被扩展; (3)如果您输入的字符导致auto-fill-mode
插入缩进。undo-boundary
来请求它。这不会导致重置字符数。