gpt4 book ai didi

emacs - 如何在 emacs 中撤消 call-last-kbd-macro

转载 作者:行者123 更新时间:2023-12-04 12:37:47 25 4
gpt4 key购买 nike

在 emacs 中,我有时会错误地调用 call-last-kbd-macro。撤消时,我希望撤消可以原子地撤消键盘宏的整个效果,但这并没有发生。相反,我发现自己必须一次撤消宏的每一步。如何让emacs在执行宏之前返回缓冲区状态?

最佳答案

恐怕你不能只用内置的 'undo 做到这一点机制。 Emacs 中的宏系统实际上回放内容,就好像用户实际上是在键入按键(或鼠标事件)一样,因此 undo history ( buffer-undo-list ) 正常更新。

这里有一个关于如何扩展当前 undo 的建议机制来做你想做的事。

  • 延长 'undo要了解撤消列表中的新条目,macro-begin标记和 macro-end元素
  • 建议/更改宏播放以在宏播放的开头/结尾插入标记
  • undo代码将两个标记之间的所有撤消事件视为一个单元并将它们全部撤消(并在撤消历史记录的末尾添加适当的标记,以便当您 redo 事情时,它们仍然被视为单个块)

  • 注意事项:
  • 这仅适用于在单个缓冲区中运行的宏,如果您的宏切换了缓冲区(或在其他缓冲区中有副作用),则这些更改不会被视为块。
  • 如果您的宏在与开始时不同的缓冲区中结束,那么您必须干净利落地处理-您不希望“不平衡”macro-beginmacro-end撤消列表中的标记。

  • 不用说,这是一项复杂的工作。祝你好运。

    关于emacs - 如何在 emacs 中撤消 call-last-kbd-macro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035430/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com