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