719

在 Vim 中,我做了太多撤消操作。如何撤消此操作(即重做)?

4

10 回答 10

932

Ctrl+r

于 2009-10-12T17:12:27.867 回答
137

另请查看:undolist,它提供了通过撤消历史记录的多种路径。如果您在撤消过多后不小心键入了某些内容,这将很有用。

于 2009-10-12T18:20:35.500 回答
55

使用:earlier/ :later。重做你只需要做的一切

later 9999999d

(假设您最多在 9999999 天前第一次编辑该文件),或者,如果您记得当前撤消状态和所需撤消状态之间的区别,请使用NhNm分别Ns表示小时、分钟和秒。+ :later N<CR><=>Ng+:later Nf文件写入。

于 2012-06-23T11:38:55.403 回答
47

Vim 文档

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}
于 2009-10-12T17:15:47.453 回答
30

在命令模式下,使用U键撤消和Ctrl+r重做。看看http://www.vim.org/htmldoc/undo.html

于 2009-10-12T17:12:31.470 回答
15

首先按Esc键退出编辑模式。

然后,

对于undo,使用ukey 多次你想撤消。

对于重做,使用Ctrl+r

于 2015-11-28T11:37:17.317 回答
11

请参阅Vim 文档的“撤消”和“重做”部分

:red[o](重做一项已撤消的更改)和 {count} Ctrl+ r(重做 {count} 个已撤消的更改)都可以。

此外,:earlier {count} (转到较旧的文本状态 {count} 次)总是可以替代撤消和重做。

于 2014-02-17T03:22:25.750 回答
5

CTRL+r

“r”是小写的。

于 2009-10-12T17:14:08.503 回答
4

在 Visual Studio 中使用 VsVim?

我在尝试 VsVim 时遇到了这个问题,它为Visual Studio 中的 Vim 命令提供绑定

我知道CtrlrVim 本身,但是这个特定的绑定在 VsVim 中不起作用(至少在我的设置中不起作用?)。

然而,真正起作用的是 command :red。这比上面的要麻烦一些,但是当你真正需要它时它仍然可以。

于 2018-02-08T08:35:01.057 回答
2

实际上,:undolist它很难使用,而且 Vim 的更改:earlier:later时间跟踪仅可用于课程粒度修复。

鉴于此,我求助于一个插件,它结合了这些功能来提供可浏览撤消的可视化树,称为“Gundo”。</p>

显然,只有当您需要细粒度的修复,或者您不确定要返回到的文档的确切状态时,才需要使用它。见:贡多。以风格绘制 Vim 撤消树

于 2018-06-07T14:59:54.153 回答