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

Dav*_*ers 43 vim editor

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

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

ib.*_*ib. 74

要将当前缓冲区恢复到撤消列表中Vim记住的第一个更改之前的状态(请参阅参考资料:help undo-tree),请使用命令

:u1|u
Run Code Online (Sandbox Code Playgroud)

  • @David:`|`字符分隔写在一行中的命令,它不像shell管道.上面的命令首先运行命令`:undo 1`,然后运行`:undo`.前一个命令跳转到第一个更改后,后一个命令撤消第一个更改,从而使当前缓冲区保持在任何记忆更改之前的状态. (7认同)
  • 是的,那应该与我所拥有的`:u 1`相同; 如果没有任何更改,它将给出错误"Undo number 1"未找到(使用带有大数量的`:early`将应对)管道语法不是undo-tree的一部分; 它只是一个接一个地放两个vim命令.(即它相当于`:u1`,然后是`:u`) (3认同)

Zso*_*kai 51

你可以使用

:edit!
Run Code Online (Sandbox Code Playgroud)

命令进入最早保存状态.有关:help edit!更多信息,请参阅

您还可以检查类似gundo.vim(可在此处找到)的内容,以图形方式显示整个撤消树,并且您可以轻松地在点之间跳转.然后有histwin plugin我尚未使用的,但提供类似的功能.

  • 但请注意,`:e!`命令会丢弃上次写入文件后的所有更改,而不是自打开缓冲区以来的所有编辑. (11认同)

Hop*_*ope 12

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

  • 适用于 2018 年 8 月 17 日编译的现代 GNU vim Vi IMproved 8.1 (2认同)

ben*_*gan 6

从文档中

:u [ndo] {N}在更改号码{N}后跳转到.参见| undo-branches | 对于{N}的含义.{Vi无此功能}

如果你输入 :u 1 它似乎是在第一次改变后去的; 按下u或键入:u将返回到更改.

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

如果你将它放入映射/命令中,它可以做任何这些而不会有太多麻烦.例如

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


Xav*_* T. 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.
Run Code Online (Sandbox Code Playgroud)