如何在Vim中进行重做(即"撤消撤消")?

fly*_*ire 673 vim undo redo

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

Joh*_*kin 878

Ctrl+r

  • 哦,很酷,谢谢@Joachim - 不知道<kbd> (20认同)
  • 如果我正在阅读有关vi的内容,那么我的手指就会自行行动.vi命令在stackoverflow上不起作用.:-) (3认同)
  • 我只想把undoTree插件扔到那里,超级棒的时候你似乎已经搞砸了一连串的undos和redos. (2认同)
  • Mac用户注意:Mac终端中的Ctrl + r将破坏vim的一天。不知道要在Mac终端中使用正确的组合键来撤消,但是绝对不是Ctrl + r! (2认同)
  • 也许@tpartee意味着`Cmd + r`搞砸了吗?它确实做了一些奇怪的事情。但是`Ctrl + r`对我来说效果很好(Mac + tmux + vim) (2认同)

Pet*_*ter 129

还可以查看:undolist,它提供了撤消历史记录中的多条路径.如果您在撤消太多后意外键入内容,这将非常有用.

  • @amindfv:从`:undolist`中取出数字并输入`:undo 178`(比如说)回到步骤178. (21认同)
  • @csharpfolk使用undotree插件(https://github.com/mbbill/undotree) (2认同)

ZyX*_*ZyX 52

奇怪没有人提到:earlier/ :later.要重做你需要做的一切

later 9999999d
Run Code Online (Sandbox Code Playgroud)

(假设你第一次编辑的文件最多9999999天前),或者,如果你还记得当前撤销状态之间的差异,一个,使用需要Nh,Nm或者Ns几个小时,分钟和秒分别.+ :later N<CR><=> Ng+:later Nf文件写入.

  • 9999999d是27395年前。我假设当时在vi中未实现撤消功能。您可能要节省一些详尽的打字工作,并使用合理的数字。9999d对应大约27年,999d对应2.7年。我想在大多数情况下就足够了... (2认同)

geo*_*wa4 42

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}
Run Code Online (Sandbox Code Playgroud)


Xin*_*nus 26

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

  • @YuFengShen vim 的强大之处在于命令模式。我们不需要在插入模式下重做 (2认同)

小智 12

首先ESC按键退出编辑模式.

然后,

对于撤消,请使用u您想要撤消的密钥次数.

对于重做使用CTRL+ r


小智 10

请参阅vim文档"撤消"和"重做"部分.

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

此外:较早的 {count}(转到较旧的文本状态{count}次.)始终可以替代撤消和重做.


mim*_*net 5

CTRL+r

“r”是小写的。

  • 实际上,这应该没有关系——传统的控制台在`^r` 和`^R` 之间没有区别,Vim 遵循这一点。 (9认同)