防止Vim更新其撤消树

时间:2012-10-05 07:57:08

标签: vim undo

我有一个Vimscript函数,在BufWritePre上调用它来检查文件的完整性。通常这涉及修剪空白并检查折叠结构是否“有效”(根据我公司的惯例)。

我的问题是,如果我编辑文件然后保存它,则撤消树包含检查功能所做的编辑。有没有一种简单的方法可以说我不希望函数修改撤销树?或者我可以在函数开始时保存其状态并在结束时恢复它吗?

2 个答案:

答案 0 :(得分:6)

使用:undojoin,您可以将更改与用户完成的最后更改结合起来(尽管我会发现比将它们分开更令人困惑)。通常,撤销是步骤序列;你不能简单地省略中间的步骤,这既不直观又难以在撤销引擎中实现。

无论如何,在撤消历史记录中包含自动重新格式化的内容有多糟糕?据我了解,当用户撤消其上次编辑时,它将重新应用于下一次保存。

答案 1 :(得分:3)

如果您的BufWritePre操作正在执行最终使文件保持不变的操作,您可以:

:wundo <tmpfile>

...之后让更改文件保持不变......

:rundo <tmpfile>

这将在临时更改之前为您提供撤消历史记录,但如果该文件与之前的状态不匹配,您将收到错误File contents changed, cannot use undo info

如果您希望在BufWritePre无法撤消期间完成更改,您可以:

:set noundofile

..执行更改......

:set undofile

但是,这会丢失BufWritePre

之前的所有历史记录