2009年3月17日星期二

gvim学习实践

前几天从善用佳软上学到了不少gvim的使用方法,实际摸索中遇到了几个问题,经过尝试,基本都可以从帮助里面找到答案,这里就不作说明了。
今天又遇到一共稀奇古怪的问题,我想匹配以"ABC "开头到行尾的文本行(不含引号),按模糊匹配*的方式都无法成功。
最终尝试出了一个方法:
:/ABC .*$
这样就可以匹配到了,不知道这是不是bug?

匹配空行
/^$
直接使用行开始符和结束符

当文档里有空字符空行时使用下面的
/^\s*$
\s表示空格
*表示重复多次

删除所有空行的命令
:g/^\s*$/d
g 代表 globe,最后的d是删除行的命令,这里还可以跟其他命令。

03/24/2009
今天终于搞明白了之前设置了那么多次启动配置文件不生效的原因了
每次打开gvim文件菜单上的打开文件时,目录总是C:\Documents and Settings\Administrator
一直想设置成为一个新的目录,但是总不成功,今天才知道,原来这个目录就是gvim传说中的$HOME目录!

既然这是HOME,那配置文件就设置在这里就OK了?于是创建了一个Windows里的_vimrc文件,试着写入
colo evening #设置配色方案为黑白
新开一个gvim文件,哇塞,居然生效了!!!

于是把收集的gvim文档的设置选项简单实验了几个,什么set ruler ,incsearch等,都OK

借助这个方法,终于实现了把gvim启动目录重定向的目的,虽然是偏方,但也能用:
在_vimrc文件里写入一行:
lcd d:\mywork\doc
这样就实现了将启动目录指向d:\mywork\doc了。

还发现了一个很强的功能:Ex
通过这个命令,可以打开一个类似Dos命令dir的功能,把当前目录的列表显示出来,还支持按不同形式排序显示以及简单的目录操作:向上一级,删除,更名,执行。
这个执行命令比较神奇,基本相当于windows里的鼠标双击了,只要把光标移动到所在的行,x执行,跟双击到这个文件上没有什么区别

03/26/2009
发现了段很有用的命令:没有完全理解,暂且记录下来作为工具使用。

:g/^/exec "s/^/".strpart(line(".")." ", 0, 4) 在行首插入行号


03/27/2009
前几天遇到一个问题,把某个目录下的一组dll文件注册到系统里。
如果每个dll使用regsvr32命令单独注册比较麻烦,于是想通过脚本实现:
首先,使用了gvim的lcd命令更换编辑目录到dll所在的目录
然后使用r!dir *.dll命令将所有dll目录引入gvim
下面的问题就来了,怎么把格式比较规范的列表文件替换成用regsrv32开头的呢??
文件格式如下:

2005-04-05 20:00 69,584 AVICAP.DLL
2005-04-05 20:00 109,456 AVIFILE.DLL
2005-04-05 20:00 32,848 COMMDLG.DLL
2005-04-05 20:00 9,936 LZEXPAND.DLL
2005-04-05 20:00 68,768 MMSYSTEM.DLL
2005-04-05 20:00 126,912 MSVIDEO.DLL
2005-04-05 20:00 82,535 OLECLI.DLL
2005-04-05 20:00 24,064 OLESVR.DLL
2005-04-05 20:00 5,120 SHELL.DLL
2005-04-05 20:00 19,216 TAPI.DLL
2005-04-05 20:00 9,008 VER.DLL

今天终于解决了,当然是个很土的办法
:%s/^\A\{34}\d/regsvr32 /gc

思路就是借助列表是开头35个字符对齐的特点展开
^表示行首
\A 表非英文字母,即 [^a-zA-Z]
\d 表示数字
\{34}表示前面的字符重复34次