我有一个 Vimscript 函数,它被调用BufWritePre
来检查文件的完整性。通常这涉及修剪空白并检查折叠结构是否“有效”(根据我公司的约定)。
我的问题是,如果我编辑一个文件然后保存它,撤消树包含检查功能所做的编辑。有没有一种简单的方法可以说我不想要一个函数来修改撤消树?或者我可以在函数开始时保存它的状态并在结束时恢复它?
使用:undojoin
,您可以将您的更改与用户所做的最后更改结合起来(尽管我会发现这比将它们分开更令人困惑)。一般来说,撤消是一系列步骤;您不能简单地省略中间的步骤,这既不直观,也难以在撤消引擎中实现。
无论如何,在撤消历史记录中包含自动重新格式化有什么不好?据我了解,当用户撤消最后一次编辑时,它将在下一次保存时重新应用。
如果您的BufWritePre
操作正在执行最终使文件保持不变的操作,您可以:
:wundo <tmpfile>
...之后进行更改,使文件保持不变...
:rundo <tmpfile>
这将为您留下临时更改之前的撤消历史记录,但是如果文件与之前的状态不匹配,您将收到错误消息File contents changed, cannot use undo info
。
如果您希望在BufWritePre
无法撤消期间完成更改,您可以:
:set noundofile
.. 执行更改...
:set undofile
但是,这将丢失之前的所有历史记录BufWritePre