Questions tagged «undo-tree-mode»

2
如何在Evil中获得类似于Vim的撤消行为?
Evil中的默认撤消行为过于粗糙,因为它考虑了在进入插入模式和将其保留为一个编辑操作之间发生的任何事情。在一次插入过程中输入整个文本段落,然后执行撤消操作时,将删除整个段落。与此相反,只要在插入模式下通过输入文本以外的其他方式移动光标,Vim就会启动一个新的撤消单元。 Evil具有一个自定义变量,可用于获取更细粒度的撤消历史记录: (setq evil-want-fine-undo t) 使用此设置,就像在Vim一样,在插入模式下移动光标时,Evil将启动一个新的撤消单元。但是,此设置也弄乱了替换操作的处理方式:如果使用替换单词cw,则必须撤消两次以还原原始单词:一次用于删除新单词,一次用于重新插入原始单词。这与Vim不一致,并且没有太大意义,因为replace应该是原子的。 问题:如何配置Evil和undo-tree以获得Vim的撤消行为?

3
如何崩溃撤消历史?
我正在使用一种Emacs模式,该模式可以让您通过语音识别控制Emacs。我遇到的问题之一是Emacs处理撤消的方式与您期望通过语音进行控制时的工作方式不匹配。 当用户说出几个字然后停顿时,这被称为“话语”。话语可能包含多个命令,供Emacs执行。识别器经常会错误地识别出话语中的一个或多个命令。在这一点上,我希望能够说“撤消”,并使Emacs撤消所有由语音执行的动作,而不仅仅是语音中的最后一个动作。换句话说,我希望Emacs就撤消而言将一个发声视为一个命令,即使一个发声包含多个命令也是如此。我还想指出要回到发话之前的确切位置,我注意到普通的Emacs撤消操作不会这样做。 我已经设置了Emacs来在每个话语的开始和结束时获取回调,所以我可以检测到这种情况,我只需要弄清楚Emacs会做什么。理想情况下,我会打电话给类似的东西(undo-start-collapsing),然后(undo-stop-collapsing)将介于两者之间的所有内容神奇地折叠成一张唱片。 我在文档中进行了一些检索,发现了undo-boundary这一点,但这与我想要的相反-我需要将所有动作折叠成一个撤消记录,而不是拆分。我可以undo-boundary在发声之间使用,以确保插入被认为是分开的(默认情况下,Emacs将连续插入操作视为一个达到一定限制的操作),仅此而已。 其他并发症: 我的语音识别守护程序通过模拟X11按键来向Emacs发送一些命令,并通过emacsclient -e这样的方式发送一些命令,如果有人说(undo-collapse &rest ACTIONS)我没有可以包装的地方。 我使用undo-tree,不确定是否会使事情变得更复杂。理想情况下,解决方案将与undo-treeEmacs的正常撤消行为一起使用。 如果话语中的命令之一是“撤消”或“重做”怎么办?我想我可以更改回调逻辑,以始终将它们作为独特的发音发送给Emacs,以使事情变得更简单,然后应像使用键盘一样处理它。 延伸目标:语音可能包含用于切换当前活动窗口或缓冲区的命令。在这种情况下,最好在每个缓冲区中分别说一次“撤消”,我不需要那么花哨。但是,单个缓冲区中的所有命令仍应分组,因此,如果我说“ do-x do-y do-z switch-buffer do-a do-b do-c”,则x,y,z应该是一个撤消原始缓冲区中的记录,而a,b,c应该是切换到缓冲区中的一个记录。 是否有捷径可寻?AFAICT没有内置的功能,但Emacs广阔而深刻。 更新:我最终在下面使用了jhc的解决方案并添加了一些额外的代码。在全局中,before-change-hook我检查要更改的缓冲区是否在修改了此话语的全局缓冲区列表中,如果没有,它将进入列表并被undo-collapse-begin调用。然后,在发话结束时,我迭代列表中的所有缓冲区并调用undo-collapse-end。以下代码(为函数命名而在函数名称前添加md-): (defvar md-utterance-changed-buffers nil) (defvar-local md-collapse-undo-marker nil) (defun md-undo-collapse-begin (marker) "Mark the beginning of a collapsible undo block. This must be followed with a call to undo-collapse-end with a marker …

1
将magit与undo-tree结合使用可轻松进行历史导航
我爱undo-tree(下面的截图)。它提供了一种简单的方法为通过让周围的文件的历史记录树中的用户移动在单独的窗口(窗口底部),用简单的按键,比如通过不同版本的文件(顶部窗口)的航行n,p并C-b和C-f到开关跨相同的后代父母 最值得注意的是,undo-tree根据树视图中的选择,使用相应的版本自动更新保存文件的缓冲区。 当然,magit对于git来说是惊人的,并且如果它具有类似的功能,那将是惊人的,即让用户以交互方式浏览文件的git历史记录,同时自动更新保存文件的缓冲区。 magit今天有可能吗?

3
可能在邪恶模式下不使用撤消树吗?
我每隔一段时间就会在undo-tree中遇到错误,无法通过以下已知错误,另一个报告和reddit线程来重做。 primitive-undo: Unrecognized entry in undo list undo-tree-canary 这确实很糟糕,并且如果您没有保存该文件的最新版本,可能会导致工作丢失。 由于我从未使用过分支撤消树功能,是否可以在邪恶模式下使用emacs线性撤消? 注意:我尝试过(global-undo-tree-mode -1)直接设置,(evil-mode 1)然后禁用撤消树,但是重做(Ctrl-R)在执行此操作后不起作用。

1
配置Emacs尤其是撤消树模式来平铺窗口管理器
我想以面向框架的方式使用Emacs,并让我的平铺窗口管理器处理缓冲区组织。例如,遵循本教程。默认情况下,诸如undo-tree-mode之类的Emacs软件包似乎依赖于窗口来显示可视化效果。我在这方面错了吗?我可以将undo-tree-mode默认设置为在另一帧中打开可视化器吗?

2
如何使撤消树线性化-撤消树撤消/重做
undo-tree-undo/redo连续运行命令时,将根据当前活动分支撤消/重做操作。尽管用户一直沿途收到分支点消息,但是除非用户手动选择其他分支,否则将忽略先前的分支。 我知道我可以打开可视化器并选择一个不同的分支,但是,只需按住undo / redo键并观察完全相反的顺序,这将非常有用。理想情况下,无论visualizer缓冲区是否打开,它都应该起作用-即,以编程方式计算从头到尾以及从头到尾的顺序。 问:这本质上是一项功能请求,可以扩展undo-tree以允许线性连续撤消/重做,而不考虑可视化器缓冲区是否打开。[肯定可以接受此新功能的新功能和替代键盘快捷键。]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.