设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

如何开发 Sublime Text 2 的插件

2013-9-13 11:05| 发布者: 红黑魂| 查看: 5141| 评论: 1|来自: 开源中国编译

摘要:   Sublime Text 2是一个高度可定制的文本编辑器,一直以来对希望有一个快速强大现代的编辑工具的的程序员保持着持续的吸引力。现在,我们将创建自己的一个Sublime plugin,实现用Nettuts+ PrefixrAPI处理CSS实现跨 ...

  Sublime Text 2是一个高度可定制的文本编辑器,一直以来对希望有一个快速强大现代的编辑工具的的程序员

保持着持续的吸引力。现在,我们将创建自己的一个Sublime plugin,实现用Nettuts+ Prefixr API处理CSS实现

跨浏览器CSS的目的。

当完成时,你会深入的明了如何创建一个 Sublime Prefixr plugin,并且有能力去写你自己的编辑器插件。


前言:术语和参考资料

The extension model for Sublime Text 2 is fairly full-featured.


  Sublime Text 2的扩展模型是相当的功能全面。你可以改变语法高亮,实际的编辑器外观,以及所有的菜单

项。此外,还可以创建新的build环境,自动补全,语言定义,代码区段,宏,键绑定,鼠标绑定以及插件。所有

这些不同形式的改装都是用组织在package中的文件来实现的。


  所谓pacakage就是一个存储在你的Packages目录中的文件夹。你可以点击Preferences >

 Browse Packages… 菜单进入你的Packages目录。也可以通过创建一个zip文件并且把扩展名

改为.sublime-package来实现把pacakage打包成一个单独文件。我们将在本教程中讨论一点怎么打包。


  Sublime绑定了很多不同的package。大不多数绑定的都是和特定语言相关的package,包括语言定义,

自动补全以及build环境。除了语言相关的package,还有两个Default和User package。Defaultpackage包

含了所有的标准键绑定,菜单定义,文件设置和一大堆用python写的插件。

During the process of writing a plugin, the   Sublime Text 2 API reference will be essential.


  要写一个插件, Sublime Text 2 API reference是根本。此外,Defaultpackage对于怎么做我们的工作

也是一个很好的参考。编辑器的大部分功能都是通过commans命令来实现,除了敲入字符之外的所有操作都可

以通过commans完成。查看Preferences > Key Bindings – Defaultmenu ,你可以找到很多有用的内建的

功能。

现在,pacakge和产检的区别已经清楚了,可以开始写我们的插件了。

第一步 - 起步


  Sublime有一个功能可以产生一个简单插件所需要的Python代码框架。选择Tools > New Plugin…菜单,

可以打开一个新的文件,带有下面的样式:

1import sublime, sublime_plugin
2 
3class ExampleCommand(sublime_plugin.TextCommand):
4    def run(self, edit):
5        self.view.insert(edit, 0"Hello, World!")


  可以看到,引入了两个Sublime Python的模块,使得我们可以访问其API并且创建一个新的类。在开始编

辑创

建我们自己的插件之前,请先保存这个文件。


  要保存这个文件我们需要创建一个package来保存它。 按下 ctrl+s(Windows/Linux) or cmd+s 

(OS X) 来保存文件。保存对话框默认打开Userpackage,不要把我们的文件存在那里,而是创建一个新的

文件夹,命名为Prefixr。

01Packages/
02
03- OCaml/
04- Perl/
05- PHP/
06- Prefixr/
07- Python/
08- R/
09- Rails/
10


  现在,把我们的文件保存在Prefixr文件夹中,命名为Prefixr.py。其实文件名并不重要,只要以.py为扩展

名就可以。但方便起见,还是用我们的插件的名字吧。


  现在,插件已经做了保存。我们可以试着运行了。输入 ctrl+`打开Sublime的控制台,这是一个可以访

问API的Python控制台。输入下面的Python代码来测试我们的新插件:

1view.run_command('example')


  你将看到Hello World被插入到了我们的插件文件的开头。接下来继续之前先Undo掉这个新的插入。


第二步 - Comman的类型和名字

  对于一个插件,Sublime提供了三种类型的command。

  • Text commands 提供通过一个View对象访问被选定的文件或者buffer的内的能力
  • Window commands 提供一个Window对象,可引用当前的窗口
  • Application commands 没有引用任何特定的窗口,文件或者buffer,很少使用。


  因为我们要用我们的插件来操作CSS文件或者buffer里面的内容,所以我们要使用 

sublime_plugin.TextCommand 类作为我们定制的Prefixr命令的基类。这时,我们就需要命名我们

命令的类名了。


在我们的代码框架中,你可以看到下面的类:


class ExampleCommand(sublime_plugin.TextCommand):


在我们运行命令时,在控制台中执行的是下面的代码:


view.run_command('example')


  Sublime将把继承自任意一个 sublime_plugin类 
(TextCommand,WindowCommand or ApplicationCommand)的类的名字的Command后缀去掉,

并且用下划线符号命名替换驼峰式命名。 

  这样一来,为创建一个名字是prefixr的command,类名就必须是PrefixrCommand。 


class PrefixrCommand(sublime_plugin.TextCommand):


第三步 - 选定文本

  Sublime最有用的功能之一就是具备多行选定的功能


  现在,我们已经正式命名了我们的插件,可以开始从当前的buffer中获取CSS并且发送到Prefixr 

API上了。Sublime最有用的功能之一就是具备多行选定的功能。由于要获取选定的文件,我们需要把所有选定的

行放入我们的插件中处理,而不仅仅是第一个选定的。


  由于我们写的是一个文本命令,所以可以通过self.view访问当前view。view对象的self()方法将返回一个当前选

定内容的iterable Region集合,我们可以通过花括号扫描到这些内容。若找不到花括号,可以扩大选定内容到周围的

括号,以保证整个块有一个括号前缀。选定内容中是否包含花括号还将有利于我们后面对Prefixr API返回的内容作空

白调整和格式调整。


braces = False
sels = self.view.sel()
for sel in sels:
    if self.view.substr(sel).find('{') != -1:
        braces = True

  用这几行代码替换框架中的run()方法中的代码。 


  若未找到任何的花括号,我们需要循环检测每一个选定区段,把每一个区段和后括弧关联起来。之后,

用带有to参数设置为 brackets的内建命令 expand_selectionl来确保获取了每个CSS块的完整内容。

if not braces:
    new_sels = []
    for sel in sels:
        new_sels.append(self.view.find('\}', sel.end()))
    sels.clear()
    for sel in new_sels:
        sels.add(sel)
    self.view.run_command("expand_selection", {"to": "brackets"})


  若果你想再检查一次你的代码,你可以和源代码zip文件中的Prefixr1.py文件对比一下。




酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部