在vim中撤消交换文件的恢复

时间:2014-01-27 16:20:49

标签: vim

在进行重大更改之前,我意外地从vim中的旧的和过时的交换文件中“恢复”了该文件。我的变化似乎消失了。我已经尝试过探索撤消树,但仍然缺少大块的更改。无论如何我可以撤消恢复操作还是我注定了?

3 个答案:

答案 0 :(得分:8)

以下内容适用于恢复文件,还包含撤消历史记录:

  1. 假设你有my_file,它有一些持久的撤消历史记录+ .my_file.swp中未保存的更改
  2. 使用vim打开文件,然后按r获取恢复版本
  3. 将恢复版本保存到临时位置,例如:w / tmp /%
  4. 不保存关闭(:q!)。再次打开文件,然后按d删除交换文件
  5. 可选:比较/ tmp / my_file和my_file以确保您需要恢复的版本
  6. 从/ tmp / my_file手动添加更改(例如ggdG和:r / tmp /%)
  7. 这可能会简化,但这对我有用。

    PS:这不会为您提供磁盘和恢复版本文件之间更改的撤消历史记录,这些更改在历史记录中显示为一个大的编辑。

答案 1 :(得分:3)

意外恢复文件后,您只需输入:q!退出vim而不保存恢复的更改 - 这将保留原始文件和交换文件所在的位置。

下次打开文件时,您会看到相同的提示 - 按D删除交换文件,或者中止并手动查找(并可能删除同一位置的任何其他交换文件)

答案 2 :(得分:2)

我自己尝试过这种方法(启用了持久性撤消功能; Vim版本为7.3.823)。旧的更改仍在显示(在:undolist中,虽然我通常使用像Gundo或Undotree这样的插件来显示它),但在尝试恢复时,我得到了

E438: u_undo: line numbers wrong
似乎Vim无法处理这种情况。请注意,您已收到警告;恢复明确警告:

Recovery completed. You should check if everything is OK.
E308: Warning: Original file may have been changed