编辑文件时,通常通常连续执行很多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给出了一个错误:undo之后不允许使用undojoint。我可以sed ....
在离开后改为执行一些操作vim
,但是由于我是通过使用此方法,SSH
所以我更喜欢仅使用vim的解决方案(在卸载缓冲区后执行命令不会写入文件)。
编辑2尝试在VIM中执行此操作:打开一个空白文件,然后执行以下操作:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
如果现在执行a <CTRL>R
,则VIM将写回3,再进一步<CTRL>R
输入4
。即使:w
每次都执行一次,也会发生这种情况<CTRL>R
。但是,如果每次:w
执行a 时,您都通过执行功能BufWritePre
,<CTRL>R
则不会写3
回。这就是我想要做的,这就是为什么我写了“暂停历史记录”的原因,但是也许我要问的是不可能的,除了处理全部内容undotree()
。
vim.se
,我会尝试的。无论如何,佐藤似乎知道如何提供帮助。
sed
,但是sed不能撤消操作,那怎么办?如果您能够“暂停历史记录”,那么以后执行撤消操作时,vim会期望什么样的行为?我能看到的唯一行为是将这些更改(以及撤消)分组在一个撤消块中,因此我可以回答。但是,如果不是,那是什么?
vi
,但是对我来说vi
,undo命令撤消一次,然后在u
再次按下时撤消撤消(“ redo”)。那是真实的 vi。因此,我和该站点的其他用户可能不知道您问题的答案。