TextMate bundle 学习笔记之 创建模版
目标:使用textMate的模版功能,对原有的java bundle进行扩展,创建一个template,从而方便创建class源文件
步骤:
- 打开textMate, Bundles -> Bundle Editor -> Show Bundle Editor , bundle列表中找到Java, 选中之 ;
- 点击左下角 “+” 号,选择 New Template ,为template取一个名字,比如 java class
- 右边 Extention 中,输入java,作为源文件扩展, Command(s) 这里,是具体的创建逻辑逻辑,暂时咱们先空着,一会儿再回来修改。
- 选中左边栏,我们新建的java class bundle -> 点击左下角“+”号,选择 New Template File,取个名字,比如template_class.java
- 在template文件中输入以下内容, 简单解释: ${}包起来的是预设置的变量,其中TM_NEW_FILE_BASENAME是内置的,等同于你创建的文件名(不包括扩展名). 除此之外还有两个内置变量TM_NEW_FILE_DIRECTORY,TM_New_FILE,含义后面会介绍到。TM_PACKAGE不是内置的,我们将在commands中定义它。
package ${TM_PACKAGE};
/**
*Comments here.
*@author alex
*/
public class ${TM_NEW_FILE_BASENAME}{
} - 定义command。点击新建的java class template。 可以看到右面的Commands里面已经有一些代码。(默认使用的是shell脚本,由于作者对shell不熟,所以这里我使用ruby脚本. 当然python,perl也是可以的。)
使用下面的代码替换其中的内容,代码解释见注释,请尤其注意红色那一行。#!/usr/bin/env ruby -wKU # 加载模版文件 f = open(ENV["TM_NEW_FILE"], 'w') template = open("template_class.java").read # 声明两个变量 ENV["TM_YEAR"] = `date +%Y`.chomp ENV["TM_DATE"] = `date +%Y-%m-%d`.chomp #配置使用软tab (4个空格)来替换制表符 if ENV["TM_SOFT_TABS"] == "YES" tab_size = ENV["TM_TAB_SIZE"].to_i tab_size = tab_size ? tab_size : 4 template = template.gsub(/\t/, " "*tab_size) end #获取package #注意,这里我假设java源代码的根目录是java,如果你的不同,请酌情更改。 regular = /.*java\/(.*)/ ENV["TM_PACKAGE"]= ENV["TM_NEW_FILE_DIRECTORY"].match(regular)[1].split("/").join(".") template = template.gsub(/[$]\{([^}]+)\}/){|match| "#{ENV[$1]}" } f.write template f.close
- 至此,再回过头来看我们的template_class.java,就会知道其中的一些变量是怎样来的了。
好,接下来试一下。Command+Shift+N,创建一个Test.java,模版选项里面选择咱们新建的java class,ok,我们应该能够得到类似这样的一个clas, 可以看到包路径会被正确识别。package com.foooj.helianthus.crm.playground;
/**
*Comments here.
*@author alex
*/
public class Test{
} -
好,这只是一个简单的例子,但足以说明问题。如果你需要一个更复杂的模版,就请开动脑筋吧。
另外,这个套路也适合windows上的e-TextEditor,Intype等,毕竟都是仿textMate来的,可能细节略有不同而已。