当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 智能灵活的自动加载模板的Vim插件
帖子发表于 : 2010-11-26 17:33 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
智能灵活的自动加载模板的Vim插件

[介绍]
其实是昨天晚上刚想到要在Vim中使用模板的, 可是我为对Vim Script知之甚少. 都是根据需要现查手册的.

其实脚本很简单, 不仅简短, 而且没有什么复杂度. 但是我感觉它的设计理念很特别.

该脚本是根据新建文件的名字来确定模板的. 它不仅仅参考扩展名, 还要看有没有对应的全名模板.
例如, main.cc 文件中会写main函数, 而其他的 .cc 文件则不然. 显然它们需要使用不同的模板. 如果你为 main.cc 提供了模板, 就不会再应用为 .cc 文件提供的模板了.

另一个创新机制是, 该插件把模板分为普通的静态模板更为灵活的动态模板.
普通模板机制需要有一些模板文件, 当对应的文件被创建时, 直接使用模板文件的内容. 而动态模板需要一些可执行的程序(或脚本), 被称为模板生成器. 当相应的文件被创建时, 把这样的程序的输出作为缓冲区的内容.
例如, 每个 C/C++ 头文件中都会有头文件保护符(就是一个条件宏定义). 需要定义的宏是和当前的文件名相关联的, 所以这时用静态模板就无法实现了. 所以该插件引入了动态模板机制. 你只需要为相应类型的文件提供一个模板生成器, 该脚本会使用新建的文件名作为参数调用你的生成器, 而生成器的标准输出将作为模板的内容送往缓冲区.


[使用]

首先需要在~/.vimrc文件中定义一些全局变量.
代码:
let g:enable_template = 1
let g:template_dir = "~/.vim/templates"

g:template_dir 告诉插件存放模板文件(和模板生成器)的顶层目录.
其中, 普通的静态模板放在 g:template_dir/common 目录下面.
动态模板生成器放在 g:template_dir/dynamic 目录下面.
这两个目录下面都有两个相同的子目录, "ext/" 和 "full/". ext/ 目录中存放的是按扩展名提供的模板, full/ 目录中提供全名模板.

[示例 1] 为 .sh 文件应用静态模板.
假如在.vimrc中设置的模板顶层目录是 "~/.vim/templates", 那么该 .sh 模板文件应该是: ~/.vim/templates/common/ext/sh
[注: 因为是普通静态模板, 所以放在 common 目录, 因为是特定于扩展名的模板, 所以放在 ext 目录下]

~/.vim/templates/common/ext/sh 文件中写入如下内容:
#!/bin/bash
# Author: Wonder
# Description:


上面的内容就会变成我们每次在Vim中新建的 .sh 文件的初始内容.

[示例 2] 为 C/C++ 头文件(.h文件)应用动态模板
基于同示例1中相同的假设. 现在我们要写一个模板生成器: ~/.vim/templates/dynamic/ext/h
内容可以象下面这样:
#!/bin/sh
# Generate template content for a c/c++ header file.
# usage: $0 <filename>
[ -z "$1" ] && exit 1

head_def=`echo __${1}__ | tr "a-z.-" "A-Z__"`
cat << EOF
#ifndef $head_def
#define $head_def

#endif // #ifndef $head_def
EOF


别忘了生成器是要被插件调用的, 所以请给它执行权限:
代码:
chmod +x ~/.vim/templates/dynamic/ext/h

这样, 当头文件 say-hello.h 被创建时, 它的初始内容是这样的:
引用:
#ifndef __SAY_HELLO_H__
#define __SAY_HELLO_H__

#endif // #ifndef __SAY_HELLO_H__


附件:
templates.tar.gz [1.74 KiB]
被下载 162 次


下面这个是在Lily的指点下, 去掉加载模板时的提示的版本.
附件:
templates.tar.gz [1.74 KiB]
被下载 261 次


_________________
http://wonc.me/


最后由 潇洒走一回 编辑于 2010-11-28 21:37,总共编辑了 2 次

页首
 用户资料  
 
2 楼 
 文章标题 : Re: 智能灵活的自动加载模板的Vim插件
帖子发表于 : 2010-11-26 18:37 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
好累啊, 改了很多次, 终于把贴子写好了. :em06

现在请教下关于本插件中的一个问题. 就是每当应用动态模板为新文件加载初始内容时, vim就会给一个提示, 告诉我 多了几行, 还要我 按 ENTER 或其他命令继续, 我不希望出现这种提示...
附件:
Screenshot-aha.h (~) - GVIM1.png
Screenshot-aha.h (~) - GVIM1.png [ 36.4 KiB | 被浏览 1106 次 ]


图中是在 main.cc 缓冲区中执行 :e aha.h 后的提示.
如何让我的动态模板无声无息的加载呢?
希望达人提供一个解决方案.
谢谢!!!


_________________
http://wonc.me/


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 智能灵活的自动加载模板的Vim插件
帖子发表于 : 2010-11-27 21:21 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
像这样:
代码:
sil exe 'read ' . fname


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 智能灵活的自动加载模板的Vim插件
帖子发表于 : 2010-11-28 16:22 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
lilydjwg 写道:
像这样:
代码:
sil exe 'read ' . fname

谢谢莉莉!


_________________
http://wonc.me/


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 智能灵活的自动加载模板的Vim插件
帖子发表于 : 2010-11-28 17:19 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
潇洒走一回 写道:
lilydjwg 写道:
像这样:
代码:
sil exe 'read ' . fname

谢谢莉莉!


呃,我中文笔名/昵称/网名是“依云”,参见 http://lilydjwg.is-programmer.com/ ,也可以叫我“百合仙子”,参见Gtalk/Jabber群 vim-cn@appspot.com


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 智能灵活的自动加载模板的Vim插件
帖子发表于 : 2010-11-28 18:24 
头像

注册: 2009-05-20 21:43
帖子: 735
送出感谢: 2
接收感谢: 2
还是莉莉好听啊...
啊哈哈~

你的签名中的那些链接进去后发现不少好东东啊!

我是属于在Web上比较低调的人物:
没有特别需要, 我从来不使用任何即时通讯工具;
我没有维护个人博客;
我试图摆弄过IRC, 但感觉没有意思, 玩不下去;
我曾在Google Group上参加的讨论组基本都退出了.

其实我感觉在Web上太低调给我带来的很多损失, 比如不能及时了解很多热门的前沿的技术...
就像莉莉在 http://bit.ly/vim-cn 中提到的 http://snipt.org, 这真是一个好东东, 这么好的东东我居然还不知道...
我曾多次抓狂于: 如何方便的共享一些东西, 而不需要别人进行任何注册和登录之类的. 比如我写了一段东东, 想让班里的同学看, 我顶多想到放到Google Doc上共享, 但这也要求别人有Google账号不是...
我也多次在网上寻找资源的时候遇到网盘之类的恶心东东, 很多时候还会转入无比恶心的CSDN下载战, 为了下载资源我被迫注册了CDSN账号, 更恶心的是它下载东西还玩什么积分!
如果大家都能普及到莉莉的Web技术(技巧), 那么互联网的共享效率和愉快程度会极大提高!
谢谢!!!


_________________
http://wonc.me/


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 智能灵活的自动加载模板的Vim插件
帖子发表于 : 2010-11-28 20:12 
头像

注册: 2009-04-11 23:46
帖子: 4130
系统: Arch Linux
送出感谢: 11
接收感谢: 124
潇洒走一回 写道:
还是莉莉好听啊...
啊哈哈~

你的签名中的那些链接进去后发现不少好东东啊!

我是属于在Web上比较低调的人物:
没有特别需要, 我从来不使用任何即时通讯工具;
我没有维护个人博客;
我试图摆弄过IRC, 但感觉没有意思, 玩不下去;
我曾在Google Group上参加的讨论组基本都退出了.

其实我感觉在Web上太低调给我带来的很多损失, 比如不能及时了解很多热门的前沿的技术...
就像莉莉在 http://bit.ly/vim-cn 中提到的 http://snipt.org, 这真是一个好东东, 这么好的东东我居然还不知道...
我曾多次抓狂于: 如何方便的共享一些东西, 而不需要别人进行任何注册和登录之类的. 比如我写了一段东东, 想让班里的同学看, 我顶多想到放到Google Doc上共享, 但这也要求别人有Google账号不是...
我也多次在网上寻找资源的时候遇到网盘之类的恶心东东, 很多时候还会转入无比恶心的CSDN下载战, 为了下载资源我被迫注册了CDSN账号, 更恶心的是它下载东西还玩什么积分!
如果大家都能普及到莉莉的Web技术(技巧), 那么互联网的共享效率和愉快程度会极大提高!
谢谢!!!


好吧,我又多了个名字。

要纠正一点的是,http://bit.ly/vim-cn 所指向的 http://blog.hotoo.me/ 并非我写的,而是另一位叫闲耘™(hotoo)的网友的。

至于共享嘛,Dropbox 这样的好东西都墙了。。。。(如果你还是对它感兴趣的话,记得一定要点我签名中的链接注册哦,+250M 容量的!)国内的 DBank 还行,这个最近发现的 http://www.fileserve.com/ 还不知道如何。


_________________
我的博客 https://blog.lilydjwg.me/
提问的智慧
Arch Linux 中文论坛

我的vimrc: https://git.io/vimrc


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译