很久没有写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,写入如下数据但是不保存

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

1

选择是,之后界面如下:

2

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

3

执行:FinishRecovery,结束恢复过程,1.cpp.swp也会被删除。
——————————————————————
另:
博友依云提出本插件缺少一个直接删除的选项,因此修改插件如下,有需要的朋友可以下载:(修改了autoload/recover.vim)

autoload/recover.vim

暂无相关产品

23则回应给“Vim(gvim)在recover时支持diff–recover.vim插件推荐”

  1. 梧桐说道:

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

    [回复]

  2. 梧桐说道:

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

    [回复]

    Dante 回复:

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

    [回复]

    Dante 回复:

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

    [回复]

  3. nonomori说道:

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

    [回复]

    Dante 回复:

    哈,确实好久没写了~

    [回复]

  4. ww说道:

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

    [回复]

    Dante 回复:

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

    [回复]

  5. 依云说道:

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

    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? “, “&Yes\n&No”)
    + let p = confirm(“Swap File found: Diff buffer? “, “&Yes\n&No\n&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

    [回复]

    依云 回复:

    啊~缩进全没了。。。

    [回复]

    Dante 回复:

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

    [回复]

    依云 回复:

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

    [回复]

  6. 挖机破碎锤说道:

    如此好贴,咱能不顶!!

    [回复]

    Dante 回复:

    哈,多谢多谢~

    [回复]

  7. 天下懒鬼说道:

    博主我是一个vim新手,最近看了你的教程,成功为自己搭建了一个IDE,不过我在写Qt程序的时候,使用全能补全,不过我发现我打进左括号的时候,gvim响应特别慢,如果我打错了函数名字,gvim有时就直接死机了。
    比如
    dialog->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下来的,似乎没有和这个相关的。

    [回复]

    Dante 回复:

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

    [回复]

    天下懒鬼 回复:

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

    [回复]

  8. jungle说道:

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

    [回复]

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

    [回复]

    朱念洋 回复:

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

    [回复]

    风吹稻花-香两岸 回复:

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

    [回复]

    风吹稻花-香两岸 回复:

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

    [回复]

    风吹稻花-香两岸 回复:

    搞定了,我把解决方法总结了一下: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/

    [回复]

发表评论