很久没有写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,提示如下:
选择是,之后界面如下:
鼠标落在右边窗口,执行:diffput 之后界面如下:
执行:FinishRecovery,结束恢复过程,1.cpp.swp也会被删除。
------------------------------------------------------------------
另: 博友依云提出本插件缺少一个直接删除的选项,因此修改插件如下,有需要的朋友可以下载:(修改了autoload/recover.vim) autoload/recover.vim
梧桐 on #
最近刚开始学VIM,感谢博主提供的优秀教程
Reply
梧桐 on #
回复没显示?刚刚看到一个插件zencoding,强烈推荐
Reply
Dante on #
zencoding,哈,确实不错,只是写HTML的机会还是比较少,所以一直没有用起来~~
Reply
Dante on #
呃,wordpress的过滤系统又傻掉了。。现在我每天都要去垃圾评论里面把评论取回来。。。
Reply
nonomori on #
终于又等到一篇vim文章. 呵呵
Reply
Dante on #
哈,确实好久没写了~
Reply
ww on #
vimer.cn这个域名的确很酷,其实你可以考虑让别人投稿,这样可以更好发挥这个域名的作用
Reply
Dante on #
这个建议我确实也考虑过,主要还是要看读者们想看什么,我专门写篇日志给大家投票吧。
Reply
依云 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? ", "&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
Reply
依云 on #
啊~缩进全没了。。。
Reply
Dante on #
哈,依云能把修改后的插件邮件发给我不?我补充到文章里去~~
Reply
依云 on #
已发。其实就改了上面那三行,改改缩进就可以patch的。
Reply
挖机破碎锤 on #
如此好贴,咱能不顶!!
Reply
Dante on #
哈,多谢多谢~
Reply
天下懒鬼 on #
博主我是一个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下来的,似乎没有和这个相关的。
Reply
Dante on #
tags太大的话,搜索就会比较慢。
是不是开启了showfunc.vim这个插件?实时性带来的代价就是速度变慢,可以把这个插件删掉试试看。
Reply
天下懒鬼 on #
谢谢博主,我把那个插件删除掉了,结果左边括号的问题就解决了,看来就是这个问题。
Reply
jungle on #
你好,最近使用vim,不知道按错什么键了,反正保存的时候提示readonly选项被开启;
然后set noreadonly
又冒出一个 read-only被开启,还是要求加!强制执行,但是用set查看,也没看到什么read-only选项啊
能告诉我怎么回事么 ? 谢谢
Reply
风吹稻花-香两岸 on #
我在win7中使用gvimdiff,出现了如下信息:E810: Cannot read or write temp filesE97: 无法创建diff请按ENTER或其他命令继续请问会是什么问题?ps:路径中没有空格;继续后可以显示两个比较的文档,但是有差异的地方没有高亮
Reply
Dante on #
应该是swp文件创建失败,创建的目录vim没有权限。
Reply
风吹稻花-香两岸 on #
多谢!我发现打开的两个文件可以高亮出有差异的行(比如某个文件中多了一行,就会高亮出这一行),但是若果行内的文字有差异却没有高亮。请问该怎么设置呢?看帮助文档也没看明白.....
Reply
风吹稻花-香两岸 on #
我的方式是运行cmd后,cd到文件目录,然后再运行gvimdiff file1 file2是不是这样做不对?即使用管理员身份运行cmd,也报错的;另外,我的文件目录不在C盘,一般就没有权限的问题吧
Reply
风吹稻花-香两岸 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