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