重做所有未完成的更改

Redo all undone changes

类似于this question,是否有一个命令可以重做vim中所有未完成的更改?目前我只知道1000<C-R>或类似的,只是重做大量的更改,但感觉很麻烦而且很随意。

尝试:exec 'undo' undotree()['seq_last']

这将重做每个更改,直到最新的更改。

如果你想把它映射到像ctrl+shift+R这样的东西。 把它放在你的 vimrc 文件中:

nnoremap <C-S-R> :exec 'undo' undotree()['seq_last']<CR>

说明

undo {N} 跳转到撤消树中的第 n 个更改。

undotree() 是一个函数,returns 一个带有撤销树状态的字典。

undotree()['seq_last'] 在字典中查找关键字seq_last

:help undotree 我们看到与 seq_last 关联的值是: The highest undo sequence number used.

:exec 从我们的表达式计算字符串。 比方说,undotree()['seq_last'] returns 42。 此示例中的表达式将是 undo 42,这将我们带到最新的更改,即第 42 个更改。

Vim有撤消分支,而不仅仅是线性撤消序列;记住这一点很重要。要转到最新的文本状态,您可以使用 9999g+9999 是任意高数)。或者,您可以使用 :later 1d.