最近准备已久的模板载入插件 load_template 终于搞定了,现在正式放出下载大家使用.www.vim.org上已经放出了下载链接,如下: http://www.vim.org/scripts/script.php?script_id=2957 注:不好意思,由于之前我的疏忽,部分在vimrc中的变量没有放到插件中,已经修正,在www.vimer.cn和www.vim.org均可下载 就不多废话了,直接把写的中文介绍文档贴到这里啦
1.简单介绍
该插件主要实现了自动载入各种模板的功能(如类模板,html模板,makefile模板等等),并且支持动态模版的功能,即能够通过脚本动态的实现文件名,类名的替换。(默认已经提供了简单main函数模板、单体类模板、html标准模板、xml标准模板)
2.使用说明
1)下载load_template.vim插件,并放在plugin的目录下
2)在vimrc文件中指定你的模板目录,来指定插件读取模板的目录。 如在下载包中已经带了一个template的目录,里面按照文件扩展名、文件类型,分别建立了目录,你可以将这个template文件夹复制到C:\,那么就可以指定 let g:template_path = 'C:\template\' 注意,最后的'\'请务必不要忘记(在linux下也是一样要加 '/' )
3)新建/打开一个test.cpp,执行 :LoadTemplate 试试看,是否有类似模板列表出来啦~
Template filelist:
0 : cpp/main.cpp
1 : cpp/singleton.h please select:
4)你甚至可以自己制作模板文件~~只需要参考已经存在的模板文件就行啦~~支持vim脚本的哦
3.命令说明
*根据当前文件的扩展名、文件类型来自动列出模板文件 :LoadTemplate *手动指定需要载入的模板文件类型(其中type为需要载入的模板类型,如cpp,html...) :LoadTemplate type
4.模板文件的制作 如果,你有写好的模板文件希望与大家分享,欢迎联系我!~~(我的博客和联系方式在文件的最前和最后都可以看到~)
1)简单纯静态文字模板的制作
a)首先,你需要选择你要制作的模板文件类型,例如为html格式,任意起个名字为 test_t.html
b)为你的模板文件选择存放目录,插件支持存放在两种地方
1.g:template_path/test_t.html
2.g:template_path/html/test_t.html
相比来说,第二种比第一种更方便管理,但是第一种却更简单一些,一切看自己的喜欢啦
c)为你的模板文件写入你要的代码,然后保存。
OK,上面的步骤已经完成了一个模板文件的制作过程,可以尝试新建/打开一个*.html来测试一下啦
2)静态文字+脚本的模板的制作
对这种模板,插件里是有固定的格式来规定脚本要写在那个部分的(不用担心,这部分的代码在执行完毕后会被删除掉,不会被载入的)
格式是这样的:
EXE_BEGIN_TEMPLATE
EXE_END_TEMPLATE
在这两行的中间就可以写任意的vim脚本,例如singleton.h里面就写了很多这样的脚本:
EXE_BEGIN_TEMPLATE
let classname = input(“Please input class name : “)
if classname =~ ‘^\s*$’
let classname = “CClass”
endif
execute ‘%s/CClass/’.classname.‘/g’
if !filereadable(expand(“%:t:r”).‘.cpp’)
execute “new “.expand(“%:t:r”).‘.cpp’
normal o
call setline(‘.’,classname.“* “.classname.“::m_ins = NULL;”)
normal o
call setline(‘.’,“auto_ptr<”.classname.“> “.classname.“::m_auto_ptr;”)
normal o
call setline(‘.’,classname.“::”.classname.“()”)
normal o
call setline(‘.’,“{“)
normal o
call setline(‘.’,” m_auto_ptr = auto_ptr<”.classname.“>(this);”)
normal o
call setline(‘.’,“}”)
normal o
call setline(‘.’,classname.“::~”.classname.“()”)
normal o
call setline(‘.’,“{“)
normal o
call setline(‘.’,“}”)
normal o
call setline(‘.’,classname.“* “.classname.“::Ins()”)
normal o
call setline(‘.’,“{“)
normal o
call setline(‘.’,” if ( m_ins == NULL)”)
normal o
call setline(‘.’,” m_ins = new “.classname.“();”)
normal o
call setline(‘.’,” return m_ins;”)
normal o
call setline(‘.’,“}”)
normal o
endif
EXE_END_TEMPLATE
这段脚本配合模板,会先提示你输入类名,然后生成一个标准的单体类(包括.h和.cpp文件),大家可以尝试一下~~
3)特殊说明
对于有些模板其中执行脚本,可能会影响到缓冲区中原有的数据,所以插件提供了一种方法:即在新建一个缓冲区中载入模板,然后在copy到原来的缓冲区中。
如果需要这样的定义,需要在 EXE_BEGIN_TEMPLATE 后面加上一个字段,即:
EXE_BEGIN_TEMPLATE NEEDNEW
EXE_END_TEMPLATE
这样即可.
5.有任何问题,欢迎光临我的博客 https://www.vimer.cn,也欢迎给我发邮件:zny2008@gmail.com / dantezhu@vip.qq.com 另外针对单体类(singleton.h)的生成,专门附图如下:
由于load_template插件本身支持个性化各种模板,欢迎大家有好的模板能够互相分享,vimer.cn在这里会给大家提供一个交流的平台。
樂師 on #
出错-.-...
处理 D:\AcVim\vimfiles\plugin\load_template.vim 时发生错误:
第 33 行:
E121: 未定义的变量: g:vimrc_splitstr
E15: 无效的表达式: '~'.g:vimrc_splitstr.'template_source.vim'
Reply
Dante on #
多谢提醒,实在不好意思,有些变量在vimrc中忘记放到插件里了~~~已经修正欢迎继续提出意见~
Reply
樂師 on #
挺好用.
我觉得你可以把默认改为
let g:template_path =$VIM.'/vimfiles/template/'
因为别人都喜欢把TEMPLATE放在VIMFILES里了.也不用多定义一个template_path变量,而想改的人自然可以改到别的路径..
Reply
樂師 on #
我记得这个貌似可以在WIN和LINUX通用..反正我现在是WIN下没问题..
Reply
Dante on #
嗯啊,已经默认指定了C:/template(linux下是~/template),没有用 $VIM主要是linux下的用户可能并没有权限放在$VIM下~~
呵呵~~欢迎随时反馈啊~~
Reply
依云 on #
我通常这么写:
if has("win32")
let MRU_File = '$VIM/vimfiles/vim_mru_files'
else
let MRU_File = '~/.vim/vim_mru_files'
endif
Reply
樂師 on #
WIN下找不到摸版
我是在RC里写的.插件里应该要自己写表达式才能找到$VIM.-.-.我的错
Reply
樂師 on #
不过输入 LOADTEMP + 类型又能找到..奇怪了.
之前还不用输就能找到.
Reply
樂師 on #
我没在VIMRC里写设置,现在输
LOADTEMP TYPE 就能找到
只输LOADTEMP 倒是找不到了.这应该没问题吧?
Reply
樂師 on #
如果输入LoadTemplate 就能列出所有type.点数字进入TYPE再选文件就好了,不过我觉得这样就好了,我朋友倒是这样说用的时候老是要看去看看模板文件夹有哪些模板,他的模板类型太多了可能是..
Reply
樂師 on #
这个插件太有爱了-.-..支持楼主呀,之前找的一个貌似也是LZ写的吧.好象叫TEMPLATE_LOAD之前一直那个,现在开始用这个了.感觉挺好,因为之前的模板加载都不好用,唯一好用的又要装什么软件在WIN麻烦死,因为偶老是要在LNX和WIN中切换..太感谢LZ了
Reply
Dante on #
呵呵,感谢乐师(我实在打不出繁体……)的支持啊,我之前听了你的建议把默认模板路径改了,所以不用再在vimrc中设置就能默认使用了:
if is windows
let the default template directory is $VIM.'\vimfiles\template'
else if linux or else
let the default template directory is $HOME.'/.vim/template/'
关于“只输LOADTEMP 倒是找不到了”这个问题,应该不会的哦,因为实际上调用的都是同一个函数,应该是你新建的文件的filetype为空,或者不匹配吧。比如你要加载cpp模板,试一下打开cpp文件,然后LoadTemplate试一下~~~
Reply
樂師 on #
原来如此.!我开始用的TXT,现在用CPP就好了..真牛B...太有爱了这样..
Reply
樂師 on #
这样实在是太好了,之前说的请LZ无视吧..
Reply
樂師 on #
还有你VIM表布页上的
欢迎来 http:// 来分享你的模板文件,或者直接给我 这句话 我每次点都要手动去空格,你要能改成www.vimer.cn;就不用每次都去空格了,让人会感觉这个网站不存在,开始我也以为是.后来复制了下面的网址又能进了..-.-仔细看才知道原来是这样
Reply
樂師 on #
欢迎来 http://www.vimer.cn ;这句..
Reply
Dante on #
咦,奇怪呀,我这里页面上显示是没有空格的呀,我是用IE7和谷歌浏览器,你用的是什么浏览器呀?
Reply
樂師 on #
我是用的FIREFOX 因为有VIM模式..所以比较习惯
Reply
c3t on #
我安楼主的说明,可是输入:LoadTemplate时说
NO extension or filetype
我这么设置的
_vimrc文件是let g:template_path = 'e:\template'
就是下载的这个插件里的template文件夹我直接拷贝到E盘DOC和PLUGIN复制到VIm相应文件夹里,请楼主帮忙下,我是VIM7.2
Reply
c3t on #
:LoadTemplate type输入这个可以出现文件类型选择列表,输入 :LoadTemplate 出现不了
Reply
c3t on #
我说错了,只有是:LoadTemplate +具体类型才能载入模板
Reply
Dante on #
不会哦,应该是你新建的文件没有文件类型,比如你要载入cpp模板,你应该新建或打开一个扩展名为.cpp或.h的文件,如test.cpp
Reply
果然如此 on #
嗯,博主有没有试过snipmate插件?
这个插件貌似可以实现load_template的全部功能,而且更黄更暴力一点呢
Reply
Dante on #
呵呵,看过别人用过,但是对他实在提不起兴趣,比如我写for循环,就直接写就好了,不希望有既定的规则来限制我怎么写。
或者说,我这个插件是轻量级的吧,可能部分功能被别的插件包含了,但是毕竟发展的方向不一样~
Reply
果然如此 on #
呵呵,其实我用snipmate完全不是用它来展开for循环之类的,而是来完成博主这个插件所完成的功能。
snipmate的优点是写起模板来语法更简单,它完全不要求用户懂VIM脚本,snipmate插件本身为模板提供了一个更简单的语法。并且光标位置可以在多个位置切换,回退。博主如果觉得Snipmate不太好,也可以试试jptemplate,这个插件的思路和博主这个比较像,但也提供了更高层一点模板语法。
说实话,我觉得有些时候是VIM社区管理得不太好,网站也维护得很烂,插件的搜索非常困难,一个关键字下去,经常搜不到相关功能的插件,除非你准确知道那个插件的名字才能找到。这直接导致我们这些Vimmer们总是在不断重复发明轮子。现在VIM.org上已经有数不清的模板啦snip之类的插件了。我介绍一下我的悲惨经历吧,在最早是用code_complete, 功能我觉得不太完善,然后自己硬着头皮查手册改,加功能,做了大约一周,正沾沾自喜,偶然地发现了jptemplate,跟自己的一比,我靠,差距太大了,肠子都悔青了,早知道直接用人家的就好了。后来又碰到了Snipmate,感觉更合我的口味,又换了过去。
说得有点多了,也有点偏了。博主自己写插件为VIM社区贡献,我本不该废话,只是我是觉得稍微有点重复发明轮子,希望别见怪哈~
Reply
Dante on #
呃,看来我对Snipmate有些误解啦,呵呵,正好过年,我抽时间好好看看~~
正沾沾自喜,偶然地发现了jptemplate,跟自己的一比,我靠,差距太大了,肠子都悔青了
这种感觉我也遇到过,那个郁闷啊,呵呵,本来的成就完全化为泡影……
确实linux推崇不要重复发明轮子(变态的emacs除外……),我好好研究一下哈~~
Reply
果然如此 on #
呵呵~
我在发帖之前很矛盾,因为总觉得有点打击博主热情之嫌,没有误会就好~
还有,祝博主新春快乐~O(∩_∩)O~
Reply
Dante on #
呵呵,过年刚回来,刚能上网,新年快乐~~
Reply
Ricky on #
建议多定义一些用户变量,比如
g:T_AUTHOR
g:T_AUTHOR_EMAIL
g:T_AUTHOR_WEBSITE
g:T_LICENSE
g:T_FILENAME
g:T_CREATE_DATE
g:T_CURSOR
这样在插件里默认替换掉,而不需要在每个模板里都加入一些代码去进行这样的替换
Reply
linuxphp on #
楼主你好, 首先非常感谢你提供了这么一个强悍的插件,我遇到了问题:
我是VIM7.2, 插件在WINDOWS下工作完全正常,可是在LINUX下,总是提示: no template file found....
==========
请帮忙看下是什么原因?
Reply
Dante on #
这个插件默认在linux下会默认到~/.vim/template/下搜索模板文件,你应该是没有放对路径。
另外虽然这个插件是我写的,但是其实我更推荐用一下snipmate这个插件,不重复造轮子了~~
Reply
linuxphp on #
如楼主所言, 已经解决, 万分感谢~
Reply
Xiao Ta on #
原來作者是這裏啊.
非常好用的插件,很喜歡,但是能不能setf文件類型後也能讀取模板呢?習慣vim創建文件了.發現setf 指定文件類型後不能LoadTemplate
期待下個版本進化
Reply
朱健强 on #
我觉得load_template与snipmate这类插件还是有分别的,snipmate主力是小型的片段,如for结构等,但load_template则是大模板。
我猜snipmate会把所有用到的片段都载入内存,若真是这样的话,载入大量的大模板是不实际的,而load_template刚好能解决这个问题——只在需要时加载。
所谓的大模板,就是几十k的文件,比如CMS网站后台的添删修及列表模板。
Reply
MiChael on #
你好,,楼主我这么用不了Html的引用呢?我包都加进去了,还是不行?求帮忙。。。谢谢!
Reply
Dante on #
呃,这个你这样说我也不知道哪有问题的。。不过鉴于目前已经有很多类似的插件,如sinpmate,本着不重复造轮子的原则,所以这个插件已经不维护了,可以去试试snipmate~
Reply
Dugi Guides on #
I'm not certain in case you would be interested, but do you do link exchanges? I really like your internet site and I feel we could both advantage from an exchange.
Reply
mmplayer on #
不错的插件我试一下
Reply
夏尔 on #
我使用你的这个插件出现啦一个问题,windows可以正常使用,但是在linux下,vim 打开提示表达式无效
input 这个表达式不能识别,不是编辑器命令
Reply
Dante on #
额,应该不会哈,我在windows下也经常用的,是不是win的版本太低了?
Reply
咄咄 on #
处理 g:\Program Files\Vim\vim73\plugin\load_template.vim
时发生错误:
第 129 行:
E122: 函数 LoadTemplate 已存在,请加 ! 强制替换
这是为什么呢?
by the way
博主给力啊 你的帖子们太棒了
Reply
Dante on #
哈哈,过奖~
嗯,你是手工重新加载过插件吗?
Reply
咄咄 on #
我就是把load_template.zip解压之后的文件夹们直接粘贴到我vim的目录下了
Reply
Dante on #
呃,奇怪,按理说没有问题才对,报这个错是说加载了两次,之前代码没考虑过加载两次的情况。。
Reply
咄咄 on #
额 我知道了 我在vim和vimfiles里面都粘贴过 把vimfiles里面的删掉之后就没事儿了
Reply