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

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


当前回答

撤消:C-_

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

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

其他回答

默认情况下,Emacs中的重做需要按C-g,然后撤销。

但是也可以使用Emacs内置的undo来实现重做命令。

undo-fu包使用Emacs内置的撤销功能来公开撤销和重做。


编辑,撤销fu现在已经集成到邪恶模式(如果你是一个邪恶模式的用户)。

例子:

(use-package undo-fu)
(use-package evil
  :init
  (setq evil-undo-system 'undo-fu))

取消一次:C-/ 取消两次:C-/ C-/

在撤消后立即重做一次:C-g C-/ 取消后立即重做两次:C-g C-/ C-/。注意C-g没有重复。

再次立即撤销一次:C-g C-/ 再次立即撤销,两次:C-g C-/ C-/

重做一次,同样的…

如果您在上一次执行undo命令后按了任何键(无论是键入字符还是只是移动光标),那么在执行下一次撤销/重做命令之前,不需要键入C-g。C-g只是一个安全的键,它本身没有任何作用,但可以作为一个非撤消键来表示撤消序列的结束。按另一个命令,如C-f也可以;它只是将光标从你的位置移动。

如果你在无意中按了C-g或其他命令,而你现在正在错误的方向上撤销,只需按C-g就可以再次逆转你的方向。在你到达你想要的撤销之前,你将不得不在所有偶然的重做和撤销中撤销,但如果你只是继续按C-/,你最终会到达你想要的状态。事实上,如果你按C-g一次,然后按C-/足够多次,缓冲区曾经处于的每个状态都是可以到达的。

除了C-/,还有C-_、C-x u和M-x undo。

有关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.

我找到了重做。el非常方便地执行“正常的”撤销/重做,我通常将它绑定到C-S-z和撤销到C-z,就像这样:

(when (require 'redo nil 'noerror)
    (global-set-key (kbd "C-S-z") 'redo))

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

只需下载该文件,将其放在lisp路径中,并将上述文件粘贴到您的.emacs中。

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

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