同仁们谈喜欢的Coding工具,有欣赏VS的,有欣赏Source Insight的,有欣赏Eclipse的,还有喜欢用UltraEdit的,就是没有人喜欢Vim!
在Linux环境下,正则是融入Linux血液中的,喜欢并熟练应用Vim编辑是水到渠成的事情。而在Windows环境下,学习正则没有不得不学习的理由,因此,许多的Coder学习Vim是一件痛苦的事情。虽然如此,鉴于Vim在某些情况下表现的高效率,还是建议Windows环境下的Coder们学习使用Vim为佳。
常用的应用场景之一:SQL语句
文员A拿来一张长长的Excel表格,要求将以下学员的成绩输入数据库,如下:
学号 名称 成绩
1 Lee 99
2 Tommy 87
...
333 John 78
文员已经填写好Excel表格了,怎么省事地将成绩单录入数据库呢?有两种方法,如下:
(1) 在Excel表格中增加列“Insert T_SCORE (no,name,score) Values("和");",然后以csv或txt的格式存储(以tab为分隔符),然后执行导出的SQL语句
(2) 将Excel表格导出为txt格式,然后替换
%s/^\([0-9]\+\)\s\+\(\w\+\)\s\+\([0-9]\+\)/Insert\ T_SCORE(no,name,score)\ values(\1,'\2',\3);/gc
然后执行生成的SQL语句
或许有童鞋会说,好像是方便了一点儿,但是优点也不明显啊,那再看一个例子
常用的应用场景之二:生成代码
开发Android应用,如果要访问Web Service服务,那么,使用ksoap是一个不错的选择,假如服务器端生成了一个长长的class,有很多个fields,例如:
private Long a;
private Long b;
...
private String n;
...
private Date t;
那么,在Android端,你可以KvmSerialize这个class,以达到ksoap2自动为你encode/decode这个class的目的,为此,你需要implement一些接口,如
@Override
public Object getProperty(int arg0) {
// TODO Auto-generated method stub
switch(arg0){
case 0:
return a;
case 1:
return b;
...
case 31:
return t;
}
return null;
}
Coding这个getProperty会让你写一大堆的代码。但是,如果你用Vim,那么可以这样做:
(1) 将服务器端的那个class的fields代码复制->粘贴到Vim编辑器,如前示例
private Long a;
private Long b;
...
private String n;
...
private Date t;
(2) 替换
%s/^\s*\w\+\s\+\(\w\+\)\s\+\(\w\+\);/case\ 0:\r\treturn\ \2;/gc
将会生成下面的代码
case 0:
retuen a;
case 0:
return b;
...
(3) 然后,复制->粘贴生成的代码到Eclipse,改变case之后的数字就可以了
实现getPropertyInfo接口时用这个方法更方便
@Override
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
// TODO Auto-generated method stub
switch(index)
{
case 0:
info.type = PropertyInfo.LONG_CLASS;
info.name = "a";
break;
case 1:
info.type = PropertyInfo.LONG_CLASS;
info.name = "b";
break;
...
default:
break;
}
}
生成以上代码的Vim的替换命令如下:
%s/^\s*\w\+\s\+\(\w\+\)\s\+\(\w\+\);/case\ 0:\r\tinfo.type\ =\ PropertyInfo.\1_CLASS\2;\r\tinfo.name\ =\ "\2";/gc
试试看,你的手指是不是要轻松了许多呢?
Vim可以做许多的事,其实VS等也是非常优秀的编辑工具,取长补短,使用时综合各种工具的长处才是王道