TextMate bundle 学习笔记之 创建模版

目标:使用textMate的模版功能,对原有的java bundle进行扩展,创建一个template,从而方便创建class源文件

步骤:

  1. 打开textMate, Bundles -> Bundle Editor -> Show Bundle Editor , bundle列表中找到Java, 选中之 ;
  2. 点击左下角 “+” 号,选择 New Template ,为template取一个名字,比如 java class
  3. 右边 Extention 中,输入java,作为源文件扩展, Command(s) 这里,是具体的创建逻辑逻辑,暂时咱们先空着,一会儿再回来修改。
  4. 选中左边栏,我们新建的java class bundle -> 点击左下角“+”号,选择 New Template File,取个名字,比如template_class.java
  5. 在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}{

    }
  6. 定义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 
  7. 至此,再回过头来看我们的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{

    }

  8. 好,这只是一个简单的例子,但足以说明问题。如果你需要一个更复杂的模版,就请开动脑筋吧。
    另外,这个套路也适合windows上的e-TextEditor,Intype等,毕竟都是仿textMate来的,可能细节略有不同而已。


posted on 2010-11-24 11:05  nixil  阅读(2188)  评论(0编辑  收藏  举报