代码模板
- Java 模板
- 自定义模板
在写代码的过程中,我们有许多的经常使用的代码片段,而且被反复使用.
如一个 if-else 代码块,一个 while 块,一个 for 循环,等等.如何有效而且快速的输入这些代码呢?
在 VIM 中,有一个 insert abbreviations功能.详情请参考:h iabbr.而VJDE则提供了一个更有效而且强大的方法.
注意:要使用本功能必须安装 ruby ,请参考安装指南.其中,windows 用户请一定要将 VIM 升级到7.0.20 以后.推荐最新版
Java 模板
首先,来看看在Java代码里面,我们如何来使用代码模板的.
package test;
import java.util.*;
public class Test {
public static void main(String[] args) {
System.out.println(HELLO);
Vector v;
|
}
}
我们希望写一个 for 循环遍历我们的 v,由于内置了很多的Java模板,因此,我们只需要在光标所在行,以Alt-.
则屏幕如下图:

显示在前的,是名称,分号后的,是模板的一个简单解释.
我们将选择 forie
提示我们输入类型,这里,我们的类型应该是String
然后,就自动生成了如下的代码,并将光标放置到了|的位置.
package test;
import java.util.*;
public class Test {
public static void main(String[] args) {
System.out.println(HELLO);
Vector v;
for ( Iterator iter = |.iterator() ; iter.hasNext() ; ) {
String it = iter.next();
}
}
}
到此为止,我们已经生成了我们需要的一个 for 循环.是不是很方便呢?
到发布为止,已经有jsp,html的很多模板.而且模板间是可以互相引用的.
注意:你不必为JSP单独建立模板,它自动会引用html和java的模板.如下图:

注意到没有,上面部分是Java的代码模板,下面部分是HTML的代码模板.
如果你嫌这样选择模板太麻烦的话,你可以输入模板名字的一部分,VJDE会自动匹配相应的模板,如果只有一个的时候,会直接生成代码.
使用自己的模板
如果说模板让人兴奋的话,那么,可以完全自由定义的模板,则让人欣喜若狂了.
我们简单说一个 VJDE 的模板实现的方法.VJDE以文件类型为标识来创建和使用模板.
这就是说,每一种不同的类型的文件,都可以有自己的模板.这主要是为要在各种不同文件类型上开发时使用的.
如果你不知道 VIM 的文件类型是什么,可以打开一个文件用,使用命令:set ft,则会显示filetype=jsp这样的字样,这里的jsp就是你当前文件在 VIM中的类型了.
知道文件类型后,只需要在你的Home目录下,windows 用户,可能是C:\Documents and Settings\Administrator,LINUX 用户,呵呵.
创建一个文件夹和子文件夹.vim\vjde
如果你弄不明白,用如下命令来创建:
:call mkdir(expand('~').'/.vim/vjde','p')
然后,把你写好的模板以 文件类型.iab 的样子放在目录中.如,为html写的模板,则应该是$HOME/.vim/vjde/html.iab.
做好这些工作后,你打开新文件这前,还要告诉VJDE,你要在什么文件扩展名上使用代码模板.
需要添加let g:vjde_iab_exts='cpp;c;h;hpp;rb' 到你的vimrc,修改成你需要的展名,然后,重新启动 vim,一切总算可以工作了.
我们忘记了一件重要的事情,就是模板文件的写法.^_^
我们以Java的代码模板为例来解释这个东西的文件格式.它的位置在 $VIM/vimfiles/plugin/vjde/tlds/java.iab
文件有点长,我们取出我们刚才使用的 forie 的模板来看看吧.
template forie ; for block with iterator with jdk1.5
param vartype ;the type of each object
body
for ( Iterator iter = |.iterator() ; iter.hasNext() ; ) {
%{vartype} it = iter.next();
%{VIM::command('call Vjde_import_check("java.util.Iterator")')}
}
endt
- template 模板名字 ;模板注释
名字不要起重复了,注释是为了显示在菜单上,以便明白的,最好不要省了.
- param 变量名字 ;变量注释
param 可以全写成 paramter
名字是用来引用的,注释是用来提示用户要输入的东西有什么用的.
要提示用户输入的东西.每一个变量,都可以用%{变量名字}的方法来引用.
%{vartype} it = iter.next();
我们在上面输入 String时,生成的代码是
String it = iter.next();
就是变量在起作用了.
于是,为了在生成的代码中显示出 %{xx}这样的东西来,你可能需要使用如下的模板代码了:
%{'%'}{xx}
如果你不需要变量,也可以不定义.
- body 开始定义模板内容
模板的内容从这里开始.如果第一个字符是/,则代表本行是注释.
那么,如果我们希望输入/是,我们可以在前面加一个\,变成\/
另外,在第一个字符的\总会被去掉.因此,你需要一个\的时候,请用\\.
提示:%{VIM::command('call Vjde_import_check("java.util.Iterator")'),上面的代码表示一个函数调用了.
功能是,如果 java.util.Iterator 没有被引用,就添加,引用了,就什么也不做.
你可以用这样的代码做任何事了.^_^.
提示:这个代码是在 ruby 的解析下完成的,所以,理论上你可以写任何的 ruby 代码.
给个很猛的代码,用途是输入变量类型和名字后,生成变量并生成get - set 函数:
template NewMember ;Generate a member field of class
parameter type ;the type of variable
parameter name ;variable name
body
\ //
\ private %{type} %{name} ;
\ /**
* get the value of %{name}
* @return a %{type} value of %{name}
*/
public %{type} get%{@paras["name"].value[0,1].upcase+@paras["name"].value[1..-1]}() {
return %{name};
}
\ /**
* set a new value to %{name}
* @param %{name}
*/
public void set%{paras["name"].value[0,1].upcase+paras["name"].value[1..-1]}(%{type} %{name}_n) {
this.%{name} = %{name}_n;
}
endtemplate
- endt 模板结束.可以被全写成 endtemplate
重要提示:在写模板文件的时候,如果希望有语法高亮,使用命令:set ft=vjde.或者在模板文件最后加上如下行,重新打开:
// vim: ft=vjde