全部分类>> 编程

编写你的第一个sublime插件

Sublime编辑器具有很强的扩展能力,你可以为其编写自动完成、代码片段,插件,宏等等,来提高工作效率。本文介绍你如何从头开始编写一个插件,由于插件的语言使用Python,因此你需要稍微了解Python语言。

开发插件之前

在开发第一个插件之前,可以先下载TortoiseSVN插件,然后到Packages目录找到TortoiseSVN文件夹,熟悉下里面的文件以及内容,了解一个完整的插件编写完成后的样子,有个感性认识。另外,在Packages目录下的Defualt文件夹也有很多插件的例子,值得参考,例如:

  • Packages/Default/duplicate_line.py:复制一行或者单词
  • Packages/Default/goto_line.py:提示输入,定位到行
  • Packages/Default/font.py:读取设置,调整字体
  • Packages/Default/mark.py:侧边栏添加图标
  • Packages/Default/trim_trailing_whitespace.py:保存前,去掉尾部空格

开发你的第一个插件

首先选择Tools -> New Plugin...菜单,可以看到新建了一个插件文件,代码如下:

import sublime, sublime_plugin

# ExampleCommand名字中Command为必须的
# ExampleCommand将会转换成下划线风格example,又例如TortoiseSaveCommand会变成tortoise_save
class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.insert(edit, 0, "Hello, World!")

选择Preferences -> Browser Packages...,打开Packages文件夹,新建一个目录MyExample,然后将当前文件保存至该文件夹。

此时按下CTRL + `打开控制台,运行如下命令:

view.run_command('example')

此时在当前文件最前面就会看到Hello, World!几个字符了。

Hello, World!import sublime, sublime_plugin

class ExampleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.insert(edit, 0, "Hello, World!")

恭喜你,出师告捷!下面来分析下代码。

第1行:引入了sublime和sublime_plugin两个模块,按下CTRL + `打开控制台,输入help(sublime)和help(sublime_plugin)可以查看模块中定义的对象以及它们的API,当然这些信息也可以从官方提供的API页面找到,E文不好的童鞋,这里还有一个翻译版

第3-5行:定义了一个类ExampleCommand,该类继承自sublime_plugin.TextCommand,下面的run方法就是在TextCommand中定义的。该类除了从TextCommand继承外,还可以从以下几个类继承:

  • TextCommand: 通过View对象来访问选择的/缓存区的内容,最为常用
  • WindowCommand: 通过Window对象来引用当前窗口
  • ApplicationCommand: 既不能引用文字内容,也不能引用窗口,无视之
  • EventListener: 文档发生改变时的事件处理,例如文件保存前,去掉每一行行尾的空格。这里可以查看Packages文件夹下Defualt文件夹下的trim_trailing_white_space.py的代码:
import sublime, sublime_plugin

class TrimTrailingWhiteSpace(sublime_plugin.EventListener):
    def on_pre_save(self, view):
        if view.settings().get("trim_trailing_white_space_on_save") == True:
            trailing_white_space = view.find_all("[\t ]+$")
            trailing_white_space.reverse()
            edit = view.begin_edit()
            for r in trailing_white_space:
                view.erase(edit, r)
            view.end_edit(edit)

    # ...

定义快捷键

插件编写好以后,你肯定不愿通过运行view.run_command('example')命令来调用插件,这时可以为你的插件绑定快捷键。

打开目录MyExample,新建文件Default (Windows).sublime-keymap,输入如下内容:

[
    { "keys": ["alt+v"], "command": "example" }
]

保存后,按下alt+v看看效果吧。

定义右键菜单

除了快捷键,还可以将命令添加进右键菜单、主菜单和侧边栏菜单。右键菜单在MyExample文件夹下新建文件Context.sublime-menu,内容如下:

[
    { "caption": "-" },
    { "caption": "Hello,World!", "command": "example", "args": {}}
    { "caption": "-", "id": "end" }
]

定义主菜单

主菜单文件为Main.sublime-menu,内容为:

[{
    "id": "view",
    "children": [{
        "caption": "Hello,World!",
        "id": "hello,world",
        "command": "example"
    }]
}]

定义侧边栏菜单

侧边栏文件为Side Bar.sublime-menu,内容为:

[
    { "caption": "-" },
    { "caption": "Hello,world!", "command": "example", "args": {}}
    { "caption": "-", "id": "end" }
]

发布插件

经过上述几个步骤,一个插件基本成型了,此时你可以将插件文件夹复制或者打包发送给需要的人,当然更好的做法是将插件发布到sublime的插件库,这些都是后话了。

总结

总结一下,Sublime插件的编写,最难的还是需要将插件API理解透彻,同时能够熟练的Python编程和好的IDEA,如果需要更深一步的学习的话,这里有一篇进阶教程

前一篇:你是最亮丽的那一抹颜色 返回首页