VIM 模板

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


posted @ 2015-11-20 00:45  thrillerz  阅读(1489)  评论(0编辑  收藏  举报