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"); } }