Contents
使用简介
template.el 可以让你在创建文件的时候为不同类型的文件指定初始化模板,模
板可以包含普通文本以及动态扩展的域。例如,你可以在 ~/.templates/ 目录
下包含一个 TEMPLATE.h.tpl 文件:
/* author: (>>>USER_NAME<<<) * date: (>>>ISO_DATE<<<) */ #ifndef _(>>>FILE_UPCASE<<<)_H #define _(>>>FILE_UPCASE<<<)_H 1 (>>>POINT<<<) #endif /* _(>>>FILE_UPCASE<<<)_H */
那些 (>>>USER_NAME<<<) 一类的域会动态得到扩展,更多的域可以参见
template.el 的文档,也可以通过添加到 template-expansion-alist 来定义自
己的域。
template.el 查找模板的方式非常智能,让用户可以为不同的工程、不同类型的 文件甚至是某一个特殊的文件指定不同的模板,文档里面有一个例子:
- 你有一个工程目录
~/proj/以及子目录foo/和bar/,他们都包含.java类型的文件。 - 你想为工程里面的
.java文件定义一个一般的模板,同时,为子目录foo/里面的.java文件定义另外一个模板。你还想为工程里面的所有文件名为proj.java的文件定义一个单独的模板。 - 为了避免让模板文件把你的工程目录搞得一团糟,你首先创建一个
~/proj/Templates/目录,并把一般模板的TEMPLATE.java.tpl和proj.java.tpl放到这里面。同时,在~/proj/foo/目录里面创建用于这个 子目录的模板文件TEMPLATE.java.tpl。
template.el 还有其他功能,详细可以参见他的文档。
和 ido 一类的包协同工作
如果使用 ido 的话,会发现用 ido 的 ido-find-file 来打开文件并不会触发模
板扩展,查看文档可以看出,应该修改一下 template-find-file-commands 。可
是把 ido-find-file 加到里面并不管用,查看了一下 template 的源代码可以发
现,template.el 工作的方式大概是这样的,他通过加入 hook 到
find-file-not-found-hooks (事实上,这个变量已经在版本 22.1 里面不鼓励使
用了,取而代之的是 find-file-not-found-functions) ,在新建一个文件的时
候他提供的 hook 将会被调用,这个时候他判断 this-command ,看他是否在变
量 template-find-file-commands 里面,如果在里面,那么就会执行 template
的相应工作了。而我跟踪发现 `ido-find-file' 执行之后 this-command 的值事
实上是 ido-exit-minibuffer ,因此这儿必须这样设置才会生效:
happierbee@newsmth 补充了一下,这样可以在 ido 中用 C-j , C-f 等方式创建
新文件时也可以触发模板调用了: