在Vim中重新打开文件后重做

时间:2019-02-13 18:02:59

标签: vim

我正在使用vim编辑器。我正在编写程序,并对文件进行了一些更改,然后“撤消”所有更改,并错误地关闭了文件。后来我意识到我在代码中使用的方法是正确的,因此我再次打开文件并尝试执行“重做”操作,但是当我关闭会话时,我想我已经失去了所有历史。有人可以告诉我是否可以通过某种方式重做,因为重新输入整个内容非常繁琐。 打开新的Vim文件会话后,有什么方法可以重做更改

2 个答案:

答案 0 :(得分:4)

为此,您需要启用:help persistent-undo

  

卸载缓冲区时,Vim通常会破坏为之创建的撤消树   该缓冲区。通过设置'undofile'选项,Vim将自动保存   写入文件时的撤消历史记录,编辑时恢复撤消历史记录   再次文件。

不幸的是,'undofile'默认情况下处于关闭状态,因此,除非您已对其进行配置(并且如果您尝试过重做并失败了,那么看起来好像已经关闭了),那么对于您当前的问题是没有用的。 / p>

如果swap-file仍在附近(不太可能出现Vim干净退出的情况),您可能可以从中获取少量不连贯的编辑内容。

肥皂盒

要优先考虑典型的评论:您可能现在必须接受损失,但是以此为契机重新思考您的方法。持久撤消是一个非常不错的功能。使用现代的修订控制系统(例如Git或Mercurial),您可以经常且只能在本地进行提交,并且修改操作很容易。即使不是这种选择,也可以使用Vim的插件(例如我的writebackup plugin),使经常保存重要编辑状态的“快照”变得非常容易。这些都可以使您下次免于丢失数据!

答案 1 :(得分:0)

如果您执行了某些命令,另一种方法是通过将命令历史记录重定向到寄存器中来恢复它。

:redir @h
:history
:redir END
:set paste
"hp


:redir @h ............. start redirecting output to register "h"
:history .............. outputs all commands history
:redir END ............ stops redirecting 
:set paste ............ to avoid wrong indentation
"hp ................... puts the "h" register in the current position

您可以通过执行操作来控制放置位置...

 0put h  .............. pastes the `h` register at the line zero

一旦在文件中注册或注册了一系列命令,就可以更轻松地构建如下功能:

function! Helo()
         echo "hello world"
endfunction

如果通过任何更改都使用了宏,例如q,则可以检索甚至编辑它,因为宏是常规寄存器,可以根据需要重新分配。例如,在插入模式下,您可以输入:

 Ctrl-r q .................... pastes register q 

 :let @q=  ................... starts reassingning macro q
 :let @q=  ctrl-r q .......... pastes the q register on its reassignment

将寄存器q设置为“ hello vim”

 :let @q = "ihello\<Return>vim\<Esc>"

OBS:使用双引号可以使用如上所示的控制键

任何复杂的命令都可以保存到剪贴板中

 :let @+ = @:   .............. places last command on the clipboard
 :@+ ......................... uses clipboard as command