如何暂停 VIM 历史记录?

Lui*_*rit 8 vim

当我们编辑一个文件时,我们通常会连续执行很多次 UNDO,比如 20 次。在 VIM 中,这通常通过按u20 次来执行,这会使 VIM 在历史堆栈中“上升”20 个位置。如果您随后进行了确定change,那么所有最后 20 个历史命令都将丢失,并由change. 我想在change不失去这 20 个位置的情况下进行。所以我想我想告诉VIM在我做之前停止记录历史change,然后恢复历史(不想change在历史中)。

编辑 试图更清楚:我有一个函数FF,可以在写入缓冲区时更新文件的最后几行。所以,如果我执行20 undos + write,最后一个write打开一个新的撤消分支。我尝试undojoin在内部添加FF(尝试遵循下面 jlmg 的建议),但是序列 write-undo-write 给出了一个错误:undojoint not allowed after undo。我可以sed ....在离开后做一些事情vim,但由于我通过它使用它,SSH我更喜欢仅使用vim 的解决方案(卸载缓冲区后执行命令不会写入文件)。

编辑 2尝试在 VIM 中执行此操作:打开一个空白文件,然后执行:

i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Run Code Online (Sandbox Code Playgroud)

如果现在你做了一个<CTRL>R,VIM 会写回 '3',进一步<CTRL>R你会得到4. 即使:w在 each 之后执行 a 也会发生这种情况<CTRL>R。但是,如果每次:w执行 a 时都通过 执行函数BufWritePre<CTRL>R则不会写3回。这就是我想要做的,这就是我写信“暂停历史”的原因,但除了使用完整的undotree().

Sat*_*ura 12

您不需要暂停 Vim 历史记录。实际数据形成一棵树,您可以使用该undotree()函数检索它。当然,有许多插件可以将其变成对用户更友好的东西, fi gundomundoundotree。如果您还启用撤消持久性(参见:h undo-persistence),您可以轻松浏览文件的整个更改历史记录。