在Vim中恢复已删除的行?

6

我在Ubuntu的Vim中编写代码,输入:wq保存后回到Vim中,复制了一部分需要的文本,然后删除了该部分,再次输入:wq保存,又回到了Vim中,不小心复制了另一部分文本。我需要的是第一次复制的那部分文本。但是我不能直接按u来撤销,因为我已经退出了Vim并重新进入,所以我的撤销无法返回到上一个会话。

有没有办法恢复第一次复制的那部分文本?也许Vim中有某种恢复方式,或者可以在Ubuntu中查看以前复制的内容?

任何帮助都会拯救我的生命,我会非常感激,谢谢。


我认为这是不可行的。除非你在其他地方做了之前的备份,否则文件系统很可能没有任何备份。也许有一点点机会可以从vim交换文件中恢复信息,但是当vim正常关闭时,这些文件会被删除,所以在驱动器上寻找它们就像大海捞针。等待第二个意见以确保,但我担心除非你奇迹般地找到了之前的备份,否则你将无法找回任何东西。 - us2012
1
现在这并没有帮助到你,但是以后你可以通过设置undofile选项来保留你的撤销操作。 - Lieven Keersmaekers
如果恢复数据(而不是重写)非常非常重要,请参阅Ubuntu文档维基中的DataRecovery页面(https://help.ubuntu.com/community/DataRecovery)。 (请记住,很遗憾,您可能不会成功。) - Eliah Kagan
2个回答

10
如果复制的文本不是太大,您应该查看:reg的输出。您复制的文本可能存储在寄存器1或2中。
寄存器在会话之间保存,但它们的内容大小有硬限制。使用:set viminfo?可以在您的系统上查看该限制:默认值应包括<50s10,这意味着如果寄存器的内容少于50行和/或重量小于10 KB,则保存其内容。
如果您复制了一些相当长的行,那么应该没问题。
如果想要更改这些值,请参阅:h 'viminfo'

6

在这种情况下,我的回答可能对您没有帮助,但将来可以启用跨会话的持久化undofile。

为此,您需要设置undofile选项。

请参阅:help persistent-undo

它将允许您在关闭和重新打开文件后仍然撤消。

该选项仅适用于Vim 7.3及以上版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接