SublimeNFFT:Sublime Text 2从模板新建文件的插件

13 Sep, 2012

很多编辑器在新建文件时可以选择从模板新建,这样可以避免一些重复的操作,比如我在使用 Python 时,新建文件后的第一步是在开头加入两行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

一次倒无所谓,不过每次新建文件都要这样就简直让人无语了,于是决定给 Sublime Text 2 增加这个功能,Sublime Text 2 提供了强大的插件机制,这也是其非常易用和强大的保障,更好的是,它的插件是用 Python 写的,这下就好办了。不过关于 Sublime Text 2 插件开发的文档真是少的可怜,在官方网站上也只有一堆API列表而已,在查看了自带的几个插件后,算是有点眉目了。Sublime Text 2 的设计很巧妙,主文件使用 C++ 编写,嵌入了 Python 解释器,并提供了几个接口,然后编辑器的大部分功能都是基于这几个接口,使用 Python 来实现,这样非常易于扩展。

要实现自己的这个功能,还是非常简单的,主要思路就是,在调用自己写的新建文件命令时,将文件类型传入,于是通过 Sublime Text 2自带的 insert_snippet 命令,将相应文件的模板插入,而模板采用 snippet 语法,当然直接使用普通的文件也是可以的,这样只是少了新建文件后,光标自动定位到指定的地方。思路有了,于是开始写主程序,得力于使用 Python,29行的代码就搞定了。代码还是比较简单的,比较繁琐的就是各种语言模板的建立,还有快捷键、加入菜单等功能。

然后就是例行的吐槽了:

  1. Sublime Text 2 插件的开发文档太少,更要命的是一些默认的语法约定也没有强调,导致各种没有头绪的错误
  2. 插件命令的类命名是有规定的,而且必须遵守,否则,哼哼。比如这个插件的名称 SublimeNFFT 是 New File From Template 的意思,于是在命名类的时候使用了 SublimeNFFTCommand,在设置命令名的时候使用的是 sublime_nfft 结果就是无法运行,在折腾很久后,把类命名为 SublimeNfftCommand 后,就解决了,这是多么啃人的一个错误
  3. 不止类命名有要求,连设置文件命名也有要求,一开始设置文件使用 SublimeNFFT.sublime-settings,结果在程序中,通过 sublime.load_settings 来载入设置文件,死活读不到里面的内容,有了上面的经历,于是试着把其改名为 SublimeNfft.sublime-settings,于是就行了
  4. 不好调试啊,幸好还可以通过 ctrl+` 来打开其自带的 Python 解释器,于是只好启用强大的 print 来调试了...

吐槽完毕,得谈正事了,目前 SublimeNFFT 默认支持 Python、C\C++、HTML、CSS、Ruby、PHP、Java,如果你想加入直接的语言或者使用自己的模板,非常简单,只需要修改几处文件就是了,现在还不支持 Package Control 安装,可以到 Github 上下载安装,安装以及使用方法也在那里。

项目地址: github.com/SerhoLiu/SublimeNFFT

和这个插件类似的还有一个插件 SublimeTmpl,为什么要提到呢,不只是给使用者多一个选择,更重要的是,如果要将插件提交到 Package Control,必须要有一个说明文档,于是我就仿照它的写了一个,嘿嘿。最后,有任何建议或者使用上的问题,可以在这里提出(也欢迎吐槽)。