9

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

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

4

2 回答 2

6

使用:undojoin,您可以将您的更改与用户所做的最后更改结合起来(尽管我会发现这比将它们分开更令人困惑)。一般来说,撤消是一系列步骤;您不能简单地省略中间的步骤,这既不直观,也难以在撤消引擎中实现。

无论如何,在撤消历史记录中包含自动重新格式化有什么不好?据我了解,当用户撤消最后一次编辑时,它将在下一次保存时重新应用。

于 2012-10-05T09:02:57.060 回答
3

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

:wundo <tmpfile>

...之后进行更改,使文件保持不变...

:rundo <tmpfile>

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

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

:set noundofile

.. 执行更改...

:set undofile

但是,这将丢失之前的所有历史记录BufWritePre

于 2012-10-05T08:13:51.743 回答