使用 template.el 为文件创建默认模板

使用简介

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 查找模板的方式非常智能,让用户可以为不同的工程、不同类型的 文件甚至是某一个特殊的文件指定不同的模板,文档里面有一个例子:

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 等方式创建 新文件时也可以触发模板调用了: