最后更新于 .

很久没有写vim相关的文章,愧对vimer.cn这个域名呀~~哈,不过我还是尽量保持经常给大家提供一些Vim相关的知识。
这次介绍的是 recover.vim (http://www.vim.org/scripts/script.php?script_id=3068)
先简单介绍一下背景,vim有自动生成swp文件的功能,能够在异常情况下(简单来说就是你的vim进程被强制终止)将你没有来得及保存的代码存储下来。
但这仍然有个问题,当你再次打开那个文件的时候,vim仅提示你是否要恢复,但是我们并不知道会被恢复成什么样子。。
recover.vim就是为了解决这个问题。
我们直接来做个演示可能会比较明确,以windows下的gvim7.3为例。
新建一个文件 1.cpp,写入如下数据但是不保存

#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main(int argc, const char *argv[])
{
    
    return 0;
}

打开任务管理器,kill掉gvim进程,我们会发现多了一个1.cpp.swp文件。
重新打开1.cpp,提示如下:

1
选择是,之后界面如下:

2
鼠标落在右边窗口,执行:diffput 之后界面如下:

3
执行:FinishRecovery,结束恢复过程,1.cpp.swp也会被删除。

------------------------------------------------------------------

另: 博友依云提出本插件缺少一个直接删除的选项,因此修改插件如下,有需要的朋友可以下载:(修改了autoload/recover.vim) autoload/recover.vim

 

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 梧桐

    梧桐 on #

    最近刚开始学VIM,感谢博主提供的优秀教程

    Reply

  2. 梧桐

    梧桐 on #

    回复没显示?刚刚看到一个插件zencoding,强烈推荐

    Reply

    1. Dante

      Dante on #

      zencoding,哈,确实不错,只是写HTML的机会还是比较少,所以一直没有用起来~~

      Reply

    2. Dante

      Dante on #

      呃,wordpress的过滤系统又傻掉了。。现在我每天都要去垃圾评论里面把评论取回来。。。

      Reply

  3. nonomori

    nonomori on #

    终于又等到一篇vim文章. 呵呵

    Reply

    1. Dante

      Dante on #

      哈,确实好久没写了~

      Reply

  4. ww

    ww on #

    vimer.cn这个域名的确很酷,其实你可以考虑让别人投稿,这样可以更好发挥这个域名的作用

    Reply

    1. Dante

      Dante on #

      这个建议我确实也考虑过,主要还是要看读者们想看什么,我专门写篇日志给大家投票吧。

      Reply

  5. 依云

    依云 on #

    不够完美啊,如果没有修改的话直接删除交换文件就可以了嘛。另外附上我对其选项的修改:

    diff --git a/autoload/recover.vim b/autoload/recover.vim
    --- a/autoload/recover.vim
    +++ b/autoload/recover.vim
    @@ -40,12 +40,14 @@ endfu

    fu! recover#ConfirmSwapDiff() "{{{1
    call inputsave()
    - let p = confirm("Swap File found: Diff buffer? ", "&amp;Yes\n&amp;No")
    + let p = confirm("Swap File found: Diff buffer? ", "&amp;Yes\n&amp;No\n&amp;Delete", 2)
    call inputrestore()
    if p == 1
    let v:swapchoice='r'
    let b:swapname=v:swapname
    call recover#AutoCmdBRP(1)
    + elseif p == 3
    + let v:swapchoice='d'
    endif
    endfun

    Reply

    1. 依云

      依云 on #

      啊~缩进全没了。。。

      Reply

    2. Dante

      Dante on #

      哈,依云能把修改后的插件邮件发给我不?我补充到文章里去~~

      Reply

      1. 依云

        依云 on #

        已发。其实就改了上面那三行,改改缩进就可以patch的。

        Reply

  6. 挖机破碎锤

    挖机破碎锤 on #

    如此好贴,咱能不顶!!

    Reply

    1. Dante

      Dante on #

      哈,多谢多谢~

      Reply

  7. 天下懒鬼

    天下懒鬼 on #

    博主我是一个vim新手,最近看了你的教程,成功为自己搭建了一个IDE,不过我在写Qt程序的时候,使用全能补全,不过我发现我打进左括号的时候,gvim响应特别慢,如果我打错了函数名字,gvim有时就直接死机了。
    比如
    dialog-&gt;accept( //补全不是很慢,但是打入左括号就要停那么5、6秒

    func( //没有这个函数,直接死机了。
    tags我产生的是110MB(吓了一跳,不过网上有人说只有18M),博主有办法解决么?

    我关于tags的设置就是三条:
    set tags+=F:\DevelopmentTools\Vim\cpp_src\tags
    set tags+=D:\Qt\2010.04\qt\include\tags
    set tags+=D:\Qt\2010.04\qt\src\tags
    还有两个设置
    set completeopt=menuone
    let OmniCpp_ShowPrototypeInAbbr = 1
    vimrc其他都是在各个网址(现在主要是博主的)直接copy下来的,似乎没有和这个相关的。

    Reply

    1. Dante

      Dante on #

      tags太大的话,搜索就会比较慢。
      是不是开启了showfunc.vim这个插件?实时性带来的代价就是速度变慢,可以把这个插件删掉试试看。

      Reply

      1. 天下懒鬼

        天下懒鬼 on #

        谢谢博主,我把那个插件删除掉了,结果左边括号的问题就解决了,看来就是这个问题。

        Reply

  8. jungle

    jungle on #

    你好,最近使用vim,不知道按错什么键了,反正保存的时候提示readonly选项被开启;
    然后set noreadonly
    又冒出一个 read-only被开启,还是要求加!强制执行,但是用set查看,也没看到什么read-only选项啊
    能告诉我怎么回事么 ? 谢谢

    Reply

  9. 风吹稻花-香两岸

    风吹稻花-香两岸 on #

    我在win7中使用gvimdiff,出现了如下信息:E810: Cannot read or write temp filesE97: 无法创建diff请按ENTER或其他命令继续请问会是什么问题?ps:路径中没有空格;继续后可以显示两个比较的文档,但是有差异的地方没有高亮

    Reply

    1. 朱念洋

      朱念洋 on #

      应该是swp文件创建失败,创建的目录vim没有权限。

      Reply

      1. 风吹稻花-香两岸

        风吹稻花-香两岸 on #

        多谢!我发现打开的两个文件可以高亮出有差异的行(比如某个文件中多了一行,就会高亮出这一行),但是若果行内的文字有差异却没有高亮。请问该怎么设置呢?看帮助文档也没看明白.....

        Reply

      2. 风吹稻花-香两岸

        风吹稻花-香两岸 on #

        我的方式是运行cmd后,cd到文件目录,然后再运行gvimdiff file1 file2是不是这样做不对?即使用管理员身份运行cmd,也报错的;另外,我的文件目录不在C盘,一般就没有权限的问题吧

        Reply

      3. 风吹稻花-香两岸

        风吹稻花-香两岸 on #

        搞定了,我把解决方法总结了一下:http://ziyuanjun.github.io/2014/12/23/Win7%E4%B8%AD%E7%9A%84vimdiff%E4%B8%8D%E8%83%BD%E7%94%A8%EF%BC%9F/

        Reply

发表评论