Vim实现自动加载模版功能可以有很多的方法,比如利用插件和AutoCmd等。根据文件名自动加载模板的功能利用网上某大牛自己写的插件实现,我针对Java代码进行简单地修改,以实现模板中的Java主类类名为文件名。
插件名:template_loader.vim
下载地址:template_loader.rar
功能:根据用户自定义的模板文件,如tpl.c,tpl.java等,在创建文件时,加载相应类型的模板。模板中可以可以设置用户名、用户邮箱、文件创建时间等信息。
1、下载解压后,将template_loader.vim放至plugin(~/.vim/plugin/ 或者 $HOME/vimfiles/plugin/)目录
2、_vimrc目录中添加下列代码,具体设置可以参考template_loader.vim中的注释自行设置。
let g:template_load=1 let g:template_path="your template file path, eg. D:/template" let g:template_tags_replacing=1 let g:T_AUTHOR="your name" let g:T_AUTHOR_EMAIL="your email" let g:T_DATE_FORMAT="%Y-%m-%d %H:%M:%S"
我在使用时,模板没有生效,后来运行命令:
:runtime /plugin/template_loader.vim ,发现导入文件失败,有特殊符号 ^M,
经查看,文档编码是dos的,改成unix后可以正常使用了
3、新建一个模板文件存为 templates/tpl.c(例如~/.vim/templates/tpl.c)
/*
* Author: <T_AUTHOR>
* EMAIL: <T_AUTHOR_EMAIL>
* File: <T_FILENAME>
* Date: <T_CREATE_DATE>
*/
int main()
{
<T_CURSOR>
return 0;
}
4、打开vim,输入一下命令,模板自动载入
e: test.c
更多选项请参考template_loader.vim的注释
由于我最近在看java的基础知识,经常需要编写一些测试代码,通过大牛的template_laoder.vim可以加载自定义的java模板,但是存在一个缺陷:众所周知,java文件中public类的类名必须与文件名一致,原template_loader.vim并不能实现直接将模板中的类名替换成文件名,每次都要手动修改,略显麻烦。其实,只需往template_loader.vim中简单地添加几行代码即可解决。代码如下:
if exists("g:T_FILENAME_USE_FULL_PATH") && g:T_FILENAME_USE_FULL_PATH==1
let s:fn = expand("%:p")
else
let s:fn = expand("%:t")
endif
sil! execute sl.‘,‘.el."s/<T_FILENAME>/".s:fn."/g"
unlet s:fn
"create java template based on filename without exetension
"modified by dxh1688@gmail.com
let s:fn = expand("%:t:r")
sil! execute sl.‘,‘.el."s/<T_CLASSNAME>/".s:fn."/g"
unlet s:fn
let s:curpos = search("<T_CURSOR>", ‘W‘)
if !empty(s:curpos)
call cursor(s:curpos)
sil! execute "normal df>"
sil! execute "startinsert"
endif
原理很简单,为template_loader.vim添加一个<T_CALSSNMAE>变量,在vim加载模板文件时,获取文件名并赋给<T_CALSSNAME>变量。因此,我的tpl.java模板文件如下:
/*
* Author: <T_AUTHOR>
* Email: <T_AUTHOR_EMAIL>
* File: <T_FILENAME>
* Date: <T_CREATE_DATE>
*/
import java.util.*;
public class <T_CLASSNAME> {
public static void main(String[] args) {
<T_CURSOR>
System.out.println("Hello");
}
}
原文:http://www.cnblogs.com/thrillerz/p/4979561.html