当我们编辑一个文件时,我们通常会连续执行很多次 UNDO,比如 20 次。在 VIM 中,这通常通过按u
20 次来执行,这会使 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()
.