这篇文章说“Emacs有重做,因为你可以在撤销的时候反转方向,从而撤销撤销”。

这是什么意思?用户如何使用Emacs“重做”?


当前回答

对于那些想要拥有更常见的撤消/重做功能的人,有人编写了undo-tree.el。它提供了非emacs撤消的外观和感觉,但提供了对撤消历史的整个“树”的访问。

我喜欢Emacs的内置撤销系统,但发现这个包非常直观。

以下是该文件本身的评论:

Emacs has a powerful undo system. Unlike the standard undo/redo system in most software, it allows you to recover any past state of a buffer (whereas the standard undo/redo system can lose past states as soon as you redo). However, this power comes at a price: many people find Emacs' undo system confusing and difficult to use, spawning a number of packages that replace it with the less powerful but more intuitive undo/redo system. Both the loss of data with standard undo/redo, and the confusion of Emacs' undo, stem from trying to treat undo history as a linear sequence of changes. It's not. The `undo-tree-mode' provided by this package replaces Emacs' undo system with a system that treats undo history as what it is: a branching tree of changes. This simple idea allows the more intuitive behaviour of the standard undo/redo system to be combined with the power of never losing any history. An added side bonus is that undo history can in some cases be stored more efficiently, allowing more changes to accumulate before Emacs starts discarding history.

其他回答

Doom Emacs用户,我希望你已经滚动到这里或在页面上搜索“Doom”了……

毁灭Emacs打破了香草Emacs重做快捷方式: C-g C-/ C-/ C-/ etc(或C-g C-_ C-_ C-_ etc) ...相反,它一直在撤销。 Doom Emacs也打破了撤销树重做快捷方式,在其他答案中提到,这对spacemacs等很有用: S-c -/(又名c -?) ...而不是抛出错误“C-?”没有定义”。

你需要的是:

处于邪恶模式(C-z切换进入和退出邪恶模式)(在邪恶模式应该看到蓝色光标,而不是橙色光标)和 进入“命令模式”,也就是“正常模式”(而不是“插入模式”)(Esc切换到命令模式)(应该看到块光标,而不是行光标),然后是 U代表撤销 重做的C-r

撤消:C-_

撤销后重做:C-g C-_

在C-_上多次输入以重做被C-_撤消的内容 若要多次重做emacs命令,请执行命令,然后键入C-xz,然后在z键上键入多次以重复该命令(当您想多次执行一个宏时很有趣)

小心重做时的撤销树怪癖!

许多流行的“入门套件”(prelude, purcell, spacemacs)都捆绑了撤销树。大多数(全部?)甚至自动启用它。如前所述,撤销树是可视化和遍历撤销/重做树的方便方法。前奏甚至给了它一个关键和弦(uu),还有c - xu。

问题是:undo-tree似乎破坏了Emacs默认的和众所周知的重做绑定:C-g C-/。

相反,你可以使用这些对称键来撤销/重做:

C-/     undo
C-S-/   redo

这些是有用的,因为有时你想快速重做而不打开可视化工具。

如果您需要重做上次的操作,请执行以下操作。

ESC 执行另一个撤销(C + /)

Emacs 28添加了一个重做命令(称为撤消重做)。

如果您想要更典型的撤消/重做,可以使用以下命令。

(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)

要访问此功能(也可以使用非线性历史记录,请参阅undo-fu,这是内置在undo中的emacs上的精简包装器)。