最后更新于 .

最近准备已久的模板载入插件 load_template 终于搞定了,现在正式放出下载大家使用.www.vim.org上已经放出了下载链接,如下: http://www.vim.org/scripts/script.php?script_id=2957 注:不好意思,由于之前我的疏忽,部分在vimrc中的变量没有放到插件中,已经修正,在www.vimer.cnwww.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_template0 load_template1 load_template2 load_template3  

由于load_template插件本身支持个性化各种模板,欢迎大家有好的模板能够互相分享,vimer.cn在这里会给大家提供一个交流的平台。

Pingbacks

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. 樂師

    樂師 on #

    出错-.-...
    处理 D:\AcVim\vimfiles\plugin\load_template.vim 时发生错误:

    第 33 行:

    E121: 未定义的变量: g:vimrc_splitstr

    E15: 无效的表达式: '~'.g:vimrc_splitstr.'template_source.vim'

    Reply

    1. Dante

      Dante on #

      多谢提醒,实在不好意思,有些变量在vimrc中忘记放到插件里了~~~已经修正欢迎继续提出意见~

      Reply

  2. 樂師

    樂師 on #

    挺好用.
    我觉得你可以把默认改为
    let g:template_path =$VIM.'/vimfiles/template/'
    因为别人都喜欢把TEMPLATE放在VIMFILES里了.也不用多定义一个template_path变量,而想改的人自然可以改到别的路径..

    Reply

    1. 樂師

      樂師 on #

      我记得这个貌似可以在WIN和LINUX通用..反正我现在是WIN下没问题..

      Reply

      1. Dante

        Dante on #

        嗯啊,已经默认指定了C:/template(linux下是~/template),没有用 $VIM主要是linux下的用户可能并没有权限放在$VIM下~~
        呵呵~~欢迎随时反馈啊~~

        Reply

        1. 依云

          依云 on #

          我通常这么写:
          if has("win32")
          let MRU_File = '$VIM/vimfiles/vim_mru_files'
          else
          let MRU_File = '~/.vim/vim_mru_files'
          endif

          Reply

  3. 樂師

    樂師 on #

    WIN下找不到摸版
    我是在RC里写的.插件里应该要自己写表达式才能找到$VIM.-.-.我的错

    Reply

    1. 樂師

      樂師 on #

      不过输入 LOADTEMP + 类型又能找到..奇怪了.
      之前还不用输就能找到.

      Reply

      1. 樂師

        樂師 on #

        我没在VIMRC里写设置,现在输
        LOADTEMP TYPE 就能找到
        只输LOADTEMP 倒是找不到了.这应该没问题吧?

        Reply

        1. 樂師

          樂師 on #

          如果输入LoadTemplate 就能列出所有type.点数字进入TYPE再选文件就好了,不过我觉得这样就好了,我朋友倒是这样说用的时候老是要看去看看模板文件夹有哪些模板,他的模板类型太多了可能是..

          Reply

        2. 樂師

          樂師 on #

          这个插件太有爱了-.-..支持楼主呀,之前找的一个貌似也是LZ写的吧.好象叫TEMPLATE_LOAD之前一直那个,现在开始用这个了.感觉挺好,因为之前的模板加载都不好用,唯一好用的又要装什么软件在WIN麻烦死,因为偶老是要在LNX和WIN中切换..太感谢LZ了

          Reply

        3. Dante

          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

        4. 樂師

          樂師 on #

          原来如此.!我开始用的TXT,现在用CPP就好了..真牛B...太有爱了这样..

          Reply

        5. 樂師

          樂師 on #

          这样实在是太好了,之前说的请LZ无视吧..

          Reply

  4. 樂師

    樂師 on #

    还有你VIM表布页上的
    欢迎来 http:// 来分享你的模板文件,或者直接给我 这句话 我每次点都要手动去空格,你要能改成www.vimer.cn;就不用每次都去空格了,让人会感觉这个网站不存在,开始我也以为是.后来复制了下面的网址又能进了..-.-仔细看才知道原来是这样

    Reply

    1. 樂師

      樂師 on #

      欢迎来 http://www.vimer.cn ;这句..

      Reply

      1. Dante

        Dante on #

        咦,奇怪呀,我这里页面上显示是没有空格的呀,我是用IE7和谷歌浏览器,你用的是什么浏览器呀?

        Reply

        1. 樂師

          樂師 on #

          我是用的FIREFOX 因为有VIM模式..所以比较习惯

          Reply

  5. c3t

    c3t on #

    我安楼主的说明,可是输入:LoadTemplate时说
    NO extension or filetype
    我这么设置的
    _vimrc文件是let g:template_path = 'e:\template'
    就是下载的这个插件里的template文件夹我直接拷贝到E盘DOC和PLUGIN复制到VIm相应文件夹里,请楼主帮忙下,我是VIM7.2

    Reply

  6. c3t

    c3t on #

    :LoadTemplate type输入这个可以出现文件类型选择列表,输入 :LoadTemplate 出现不了

    Reply

    1. c3t

      c3t on #

      我说错了,只有是:LoadTemplate +具体类型才能载入模板

      Reply

      1. Dante

        Dante on #

        不会哦,应该是你新建的文件没有文件类型,比如你要载入cpp模板,你应该新建或打开一个扩展名为.cpp或.h的文件,如test.cpp

        Reply

  7. 果然如此

    果然如此 on #

    嗯,博主有没有试过snipmate插件?

    这个插件貌似可以实现load_template的全部功能,而且更黄更暴力一点呢

    Reply

    1. Dante

      Dante on #

      呵呵,看过别人用过,但是对他实在提不起兴趣,比如我写for循环,就直接写就好了,不希望有既定的规则来限制我怎么写。
      或者说,我这个插件是轻量级的吧,可能部分功能被别的插件包含了,但是毕竟发展的方向不一样~

      Reply

      1. 果然如此

        果然如此 on #

        呵呵,其实我用snipmate完全不是用它来展开for循环之类的,而是来完成博主这个插件所完成的功能。

        snipmate的优点是写起模板来语法更简单,它完全不要求用户懂VIM脚本,snipmate插件本身为模板提供了一个更简单的语法。并且光标位置可以在多个位置切换,回退。博主如果觉得Snipmate不太好,也可以试试jptemplate,这个插件的思路和博主这个比较像,但也提供了更高层一点模板语法。

        说实话,我觉得有些时候是VIM社区管理得不太好,网站也维护得很烂,插件的搜索非常困难,一个关键字下去,经常搜不到相关功能的插件,除非你准确知道那个插件的名字才能找到。这直接导致我们这些Vimmer们总是在不断重复发明轮子。现在VIM.org上已经有数不清的模板啦snip之类的插件了。我介绍一下我的悲惨经历吧,在最早是用code_complete, 功能我觉得不太完善,然后自己硬着头皮查手册改,加功能,做了大约一周,正沾沾自喜,偶然地发现了jptemplate,跟自己的一比,我靠,差距太大了,肠子都悔青了,早知道直接用人家的就好了。后来又碰到了Snipmate,感觉更合我的口味,又换了过去。

        说得有点多了,也有点偏了。博主自己写插件为VIM社区贡献,我本不该废话,只是我是觉得稍微有点重复发明轮子,希望别见怪哈~

        Reply

        1. Dante

          Dante on #

          呃,看来我对Snipmate有些误解啦,呵呵,正好过年,我抽时间好好看看~~
          正沾沾自喜,偶然地发现了jptemplate,跟自己的一比,我靠,差距太大了,肠子都悔青了

          这种感觉我也遇到过,那个郁闷啊,呵呵,本来的成就完全化为泡影……

          确实linux推崇不要重复发明轮子(变态的emacs除外……),我好好研究一下哈~~

          Reply

  8. 果然如此

    果然如此 on #

    呵呵~
    我在发帖之前很矛盾,因为总觉得有点打击博主热情之嫌,没有误会就好~

    还有,祝博主新春快乐~O(∩_∩)O~

    Reply

    1. Dante

      Dante on #

      呵呵,过年刚回来,刚能上网,新年快乐~~

      Reply

  9. Ricky

    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

  10. linuxphp

    linuxphp on #

    楼主你好, 首先非常感谢你提供了这么一个强悍的插件,我遇到了问题:
    我是VIM7.2, 插件在WINDOWS下工作完全正常,可是在LINUX下,总是提示: no template file found....

    ==========
    请帮忙看下是什么原因?

    Reply

    1. Dante

      Dante on #

      这个插件默认在linux下会默认到~/.vim/template/下搜索模板文件,你应该是没有放对路径。
      另外虽然这个插件是我写的,但是其实我更推荐用一下snipmate这个插件,不重复造轮子了~~

      Reply

      1. linuxphp

        linuxphp on #

        如楼主所言, 已经解决, 万分感谢~

        Reply

  11. Xiao Ta

    Xiao Ta on #

    原來作者是這裏啊.
    非常好用的插件,很喜歡,但是能不能setf文件類型後也能讀取模板呢?習慣vim創建文件了.發現setf 指定文件類型後不能LoadTemplate
    期待下個版本進化

    Reply

  12. 朱健强

    朱健强 on #

    我觉得load_template与snipmate这类插件还是有分别的,snipmate主力是小型的片段,如for结构等,但load_template则是大模板。

    我猜snipmate会把所有用到的片段都载入内存,若真是这样的话,载入大量的大模板是不实际的,而load_template刚好能解决这个问题——只在需要时加载。

    所谓的大模板,就是几十k的文件,比如CMS网站后台的添删修及列表模板。

    Reply

  13. MiChael

    MiChael on #

    你好,,楼主我这么用不了Html的引用呢?我包都加进去了,还是不行?求帮忙。。。谢谢!

    Reply

    1. Dante

      Dante on #

      呃,这个你这样说我也不知道哪有问题的。。不过鉴于目前已经有很多类似的插件,如sinpmate,本着不重复造轮子的原则,所以这个插件已经不维护了,可以去试试snipmate~

      Reply

  14. Dugi Guides

    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

  15. mmplayer

    mmplayer on #

    不错的插件我试一下

    Reply

  16. 夏尔

    夏尔 on #

    我使用你的这个插件出现啦一个问题,windows可以正常使用,但是在linux下,vim 打开提示表达式无效

    input 这个表达式不能识别,不是编辑器命令

    Reply

    1. Dante

      Dante on #

      额,应该不会哈,我在windows下也经常用的,是不是win的版本太低了?

      Reply

  17. 咄咄

    咄咄 on #

    处理 g:\Program Files\Vim\vim73\plugin\load_template.vim
    时发生错误:

    第 129 行:

    E122: 函数 LoadTemplate 已存在,请加 ! 强制替换

    这是为什么呢?
    by the way
    博主给力啊 你的帖子们太棒了

    Reply

    1. Dante

      Dante on #

      哈哈,过奖~
      嗯,你是手工重新加载过插件吗?

      Reply

      1. 咄咄

        咄咄 on #

        我就是把load_template.zip解压之后的文件夹们直接粘贴到我vim的目录下了

        Reply

        1. Dante

          Dante on #

          呃,奇怪,按理说没有问题才对,报这个错是说加载了两次,之前代码没考虑过加载两次的情况。。

          Reply

          1. 咄咄

            咄咄 on #

            额 我知道了 我在vim和vimfiles里面都粘贴过 把vimfiles里面的删掉之后就没事儿了

            Reply

发表评论