自vim中打开缓冲区后撤消所有更改

时间:2011-12-19 17:55:13

标签: vim editor

如何在打开缓冲区后撤消所有更改?我想可能有某种形式的:earlier可以做到这一点。

更新:许多人建议使用遍历早期文件写入的解决方案。这不是我要求的。我想恢复到最初将文件加载到缓冲区时文件所处的原始状态,无论从那时起写了多少次。

7 个答案:

答案 0 :(得分:73)

将当前缓冲区恢复到第一次更改之前的状态 Vim在撤消列表中记住(参见:help undo-tree),使用命令

:u1|u

答案 1 :(得分:49)

您可以使用

:edit!

命令进入最早保存状态。有关详细信息,请参阅:help edit!

您还可以检查gundo.vimcan be found here)之类的内容,它以图形方式显示整个撤消树,您可以轻松地在点之间跳转。然后有histwin plugin我尚未使用,但提供类似的功能。

答案 2 :(得分:6)

来自文档

  

:你[ndo] {N}在更改号码{N}后跳转到。参见| undo-branches |               对于{N}的含义。 {不在Vi}

如果您输入 :u 1 它似乎是在第一次改变后发生的;按u或键入:u将返回更改。

否则,您可以使用非常大的计数:earlierg- 例如 :earlier 100000000100000000g-

如果你将它放入映射/命令中,它可以毫不费力地做任何这些。 e.g。

:nnoremap <C-F12> :earlier 100000000<CR>

答案 3 :(得分:3)

要访问以前保存的文件状态,我认为以下工作:

:earlier 1f

来自文档:

 :earlier {N}f      Go to older text state {N} file writes before.
                When changes were made since the last write
                ":earlier 1f" will revert the text to the state when
                it was written.  Otherwise it will go to the write
                before that.
                When at the state of the first file write, or when
                the file was not written, ":earlier 1f" will go to
                before the first change.

答案 4 :(得分:3)

在vim 8.1+以及neovim中,您只需使用:u0

答案 5 :(得分:0)

:earlier {N}m Go to older text state about {N} minutes before.

这应该有帮助......即使你有{N}小时,大约是{N}小时。

答案 6 :(得分:0)

图形解决方案:

Gundo插件允许直观比较撤消历史记录中的更改。

打开Gundo的“撤消历史记录窗格”,键入G转到最后一行,然后我们可以返回原始文件。