Evil中的默认撤消行为过于粗糙,因为它考虑了在进入插入模式和将其保留为一个编辑操作之间发生的任何事情。在一次插入过程中输入整个文本段落,然后执行撤消操作时,将删除整个段落。与此相反,只要在插入模式下通过输入文本以外的其他方式移动光标,Vim就会启动一个新的撤消单元。
Evil具有一个自定义变量,可用于获取更细粒度的撤消历史记录:
(setq evil-want-fine-undo t)
使用此设置,就像在Vim一样,在插入模式下移动光标时,Evil将启动一个新的撤消单元。但是,此设置也弄乱了替换操作的处理方式:如果使用替换单词cw
,则必须撤消两次以还原原始单词:一次用于删除新单词,一次用于重新插入原始单词。这与Vim不一致,并且没有太大意义,因为replace应该是原子的。
问题:如何配置Evil和undo-tree以获得Vim的撤消行为?
在此处提交问题:bitbucket.org/lyro/evil/issues?status=new&status=open(Evil通常认为与vim的差异是bug)。
—
shosti 2014年
@shosti,您是对的,但是自定义变量的存在表明他们决定在当前情况下对该规则进行例外处理。无论如何,我都会提交一个错误。让我们看看发生了什么。
—
tmalsburg 2014年
我认为定制变量实际上是为了获得更多类似Emacs的撤消行为(Emacs不会以与vim相同的方式执行原子操作)。
—
shosti 2014年