This article说“Emacs重做是因为你可以在撤消时反转方向,从而撤消撤消”。
这是什么意思?用户如何使用Emacs“重做”?
答案 0 :(得分:278)
简短版本:撤消撤消。如果撤消,然后执行非编辑命令,例如 C-f ,则下一个撤消将撤消撤消,从而导致重做。
更长的版本:
您可以将undo视为在一堆操作上运行。如果在一系列撤消操作之后执行某些命令(甚至是诸如 C-f 之类的导航命令),则所有撤消操作都将被推送到操作堆栈。所以下一个撤消撤消最后一个命令。假设您的操作序列如下所示:
现在,您撤消。它取消了最后一个动作,产生以下列表:
如果你在此时做了除撤消以外的事情 - 比如 C-f ,操作堆栈如下所示:
现在,当您撤消时,撤消的第一件事是撤消。导致原始堆栈(和文档状态):
如果执行修改命令来中断撤销序列,则在撤消后添加该命令,这是之后要撤消的第一件事。假设您在“bar”上退格,而不是按 C-f 。然后你会有
这种添加/重新添加无限期地发生。它需要一点点习惯,但它确实为Emacs提供了一个高度灵活和强大的撤销/重做机制。
答案 1 :(得分:202)
撤消: C-_
撤消后重做: C-g C-_
在 C-_ 上多次键入以重做 C-_ 撤消的内容 要多次重做emacs命令,请执行命令,然后键入 Cx z ,然后在 z 键上多次键入以重复命令(有趣的是当你想多次执行宏时)
答案 2 :(得分:46)
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
。请注意,C-g
不会重复。C-g
C-/
C-g
C-/
C-/
如果您在上次撤消命令后按下任何键(无论是键入字符还是只是移动光标),则无需在下次撤消/重做之前键入C-g
。 C-g
只是一个安全的击键,它本身不会做任何事情,但算作一个非撤销键来表示撤消序列的结束。按下C-f
等其他命令也会起作用;它只是将光标移动到你拥有它的位置。
如果您在不想要的时候点击C-g
或其他命令,并且您现在正在向错误的方向撤消,只需按C-g
再次反转您的指示即可。在你到达你想要的音乐之前,你必须通过偶然的重做和音乐撤消,但如果你只是按下C-/
,你最终会达到你想要的状态。实际上,如果您点击C-g
一次,然后按C-/
足够的次数,则可以访问缓冲区所处的每个状态。
除undo
之外的C-/
的替代快捷方式为C-_
,C-x u
和M-x
undo
。
有关Emacs撤消系统的详细信息,请参阅“Emacs手册”中的Undo。
答案 3 :(得分:37)
对于那些希望拥有更常见的撤消/重做功能的人,有人编写了undo-tree.el
。它提供了非Emacs撤消的外观和感觉,但提供了对撤消历史记录的整个“树”的访问。
我喜欢Emacs的内置撤消系统,但发现这个包非常直观。
以下是文件本身的评论:
Emacs有一个强大的撤销系统。 与标准的撤销/重做系统不同 在大多数软件中,它允许您 恢复缓冲区的任何过去状态 (而标准的撤销/重做系统 你可以尽快失去过去的州 重做)。然而,这种力量来自于 价格:很多人发现Emacs的撤消 系统混乱且难以使用, 产生了许多包 用不那么强大的东西代替它 更直观的撤销/重做系统。
标准数据丢失 撤消/重做,以及Emacs的混乱 撤消,源于试图对待撤消 历史作为线性序列 变化。不是。该 `undo-tree-mode'由此提供 package取代了Emacs的撤消系统 使用处理撤消历史记录的系统 它是什么:一个分支树 变化。这个简单的想法允许 更直观的行为 标准的撤销/重做系统 结合从不的力量 失去任何历史。另外一面 奖金是撤销历史可以在一些 案件存储更有效, 允许更多的变化积累 在Emacs开始丢弃之前 历史。
答案 4 :(得分:15)
谨防重做的undo-tree怪癖!
许多流行的“入门套件”(前奏,purcell,spacemacs)与undo-tree捆绑在一起。大多数(全部?)甚至自动启用它。如上所述,undo-tree是一种可视化和遍历撤销/重做树的方便方法。 Prelude甚至为它提供了一个和弦(float: right
),还有uu
。
问题是: undo-tree似乎破坏了Emacs对 redo 的默认和众所周知的绑定:C-x u
。
相反,您可以使用这些对称键进行撤消/重做:
C-g C-/
这些非常有用,因为有时您需要快速重做而无需打开可视化工具。
答案 5 :(得分:10)
我发现redo.el
extremly handy执行“正常”撤消/重做,我通常将其绑定到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
。
答案 6 :(得分:3)
Emacs 28 adds a redo命令(称为undo-redo
)。
如果要进行更典型的撤消/重做,可以使用以下命令。
(global-set-key (kbd "C-z") 'undo-only)
(global-set-key (kbd "C-S-z") 'undo-redo)
答案 7 :(得分:0)
如果要撤消上一个操作,请执行以下操作。
ESC
C + /
)答案 8 :(得分:0)
答案 9 :(得分:0)
Doom Emacs 用户,我希望您已经滚动到这里或在页面上搜索了“doom”...
C-g
C-/
C-/
C-/
等(或 C-g
C-_
C-_
C-_
等)
...相反,只是不断地撤消。S-C-/
(又名C-?
)
...相反,这会引发错误“C-? 未定义”。你需要的是:
C-z
切换进入和退出邪恶模式)(在邪恶模式下应该看到蓝色光标,而不是橙色光标)和Esc
切换到命令模式)(应该看到块光标,而不是行光标),然后是u
用于撤消和C-r
用于重做