我可以在上次更改vim时恢复丢失的代码吗?

CCC*_*CCC 4 linux vim

我很伤心我通过使用vim删除了错误的功能而没有提交SVN服务器在我编译之后我发现我犯了错误.我也通过vim'制作'文件.

现在我还没有关闭文件,它有.swp文件.我尝试使用'u'命令恢复删除但失败了.vim说这是最新的变化.感叹....无论如何,我可以恢复我的功能?

百万谢谢.

seh*_*ehe 8

使Drasils指针更明确:

 :undolist
Run Code Online (Sandbox Code Playgroud)

g- '回到过去'

g+ '及时前进'

Vim的7.3+有撤消"分支":这意味着它会保存状态的快照,即使线性的历史被覆盖(因此它通过简单的是不可达的u)


alp*_*989 5

有几种方法可以恢复由于崩溃或无意关闭程序而无意中丢失的文本。

  1. 使用持久撤消。持久撤消提供了第 2 点和第 3 点中交换/备份文件选项提供的几乎所有功能,以及一些其他选项,例如细粒度历史记录遍历。

    A。放persistent-undo

    把这个放在你的.vimrc

    set undofile set undodir=~/.vim/undodir

    b. 创建撤消目录

    mkdir ~/.vim/undodir

    C。要撤消更改,请使用以下选项之一

    1) g+在正常模式下历史前进

    2) g-在正常模式下回溯历史

    3)。 :earlier 20s回到 20 秒前或earlier 10m时间倒退 10 分钟等

    4) :later 20s时间向前推进 20 秒或later 10m时间前进10分钟等

    5)。使用:undolist获取撤消更改的列表

    d. 要获得撤消分支的可视化效果,您可以使用以下插件gundo.vim: http: //bitbucket.org/sjl/gundo.vim/来可视化分支

  2. 使用备份文件

    A。在你的.vimrc set backup

    b. 通过将其放入您的目录中来设置备份目录.vimrc set backupdir=~/tmp/

    C。设置要添加到备份文件中的备份文件名,方法是在您的.vimrc set backupext=string

  3. 使用交换文件

    A。在你的.vimrc set swapfile

    b. 通过将其放入您的.vimrc. 这可能不是一个好主意,因为它会阻止您拥有两个同名的文件,或者导致交换文件名发生冲突。

    set directory=~/tmp/

    更好的选择是提供多个路径,因此如果 vim 遇到冲突,它可以将其保存到可以写入的目录中

    set directory=,~/tmp/

    在这种情况下,它将尝试将交换文件写入当前目录。如果不能,那么它将尝试将其写入~/tmp目录

    C。设置要添加到备份文件中的备份文件名,方法是在您的.vimrc

    set backupext=string

TL;DR使用persistent-undoswap它提供了和的几乎所有功能,并提供了和backup不提供的附加功能,例如粒度撤消backupswap文件选项不提供的粒度撤消。

参考文献 1. ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf