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