subline text3 插件编写

新建插件



  1. 通过Tools -> New Plugin…来打开一个初始化的插件编辑文件。
    初始化后的插件有如下内容

  2. 通过Preferences -> Browse Packages…打开Packages文件夹,在该文件夹下建立个子文件夹,名字为你想开发的插件名字,如:defineReplace。
    回到插件开发的初始化编辑器页面,通过 ctrl+s 保存这个文件,并放到你建立的子文件夹下,文件名如:defineReplace.py 。
    3、通过 ctrl+` 快捷键或者View -> Show Console 打开SublimeText的控制台。
    并在输入框执行如下的命令:view.run_command(‘example’)

    执行结果如下,第一行插入了Hello,World!:
    4、ExampleCommand类名字改为你想要的插件名字,如: definereplaceCommand(将Command之前的名称先全部小写,当然还有其他方式),然后就可以开发该插件对应的功能了,当然这时候输入的命令也变成了view.run_command(‘definereplace’),这样执行才有效。



注意:command命令的名称是根据大写字符进行拆分的,如果定义的是class DefineRePlaceCommand,那么输入的命令是view.run_command(‘define_re_place’),拆分出来的单词需要全部小写,中间以下划线相连接。
 5、通过官方的API文档查找你需要的接口,文档见:http://www.sublimetext.com/docs/3/api_reference.html



  二、编写插件



  下面我分享一下我写的一个插件,这个插件的功能是将verilog文件中的define定义,全部替换成真实的值
 将文件中的宏定义替换成真实的值:
三、绑定快捷键



  这两个文件分别对应着不同的平台windows和linux,当然在Mac平台是Default (OSX).sublime-keymap。文件内容如下:
[
{ “keys”: [“ctrl+shift+r”], “command”: “definereplace”}
]
  keys代表对应的快捷键,command代表着要执行的命令。 在defineReplace文件夹下新建映射文件,文件名是固定的。




添加插件
首先新建一个插件



点击 Perferences -> Browse Packages…, 在打开的文件夹下面新建一个目录:Mike;
点击 Tools -> New Plugin…,将文件保存到插件目录 Mike 下面,取名为: mike.py, 修改文件内容如下:



import sublime, sublime_plugin



class MikeCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.insert(edit, 0, “Hello, World!”)



使用 Ctrl + ` 打开 ST3 的命令行,输入:



view.run_command(“mike”)



如果成功在当前文件下看到 Hello, World! 表示插件已经添加成功
插件命令的解析规则很简单, 命令名称 + Command 构成class, 当然这里的命令名称是首字母大写的,但是执行的时候会转化为小写的,例如:
class MikeWangCommand 所对应的命令是: mike_wang
为插件添加快捷键
在插件的目录Mike下面新建文件: Default (Linux).sublime-keymap,
表示在Linux下面的快捷键设置,当然也可以为不同平台指定快捷键,具体支持如下:



Default (Windows).sublime-keymap
Default (OSX).sublime-keymap
Default (Linux).sublime-keymap



其内容如下:
[
{
“keys”: [
“ctrl+alt+k”
],
“command”: “mike”
}
]



文件内容必须是一个json格式的数组, keys表示快捷键的组合方式, command则表示所要执行的命令.
为插件添加菜单
ST3支持3种类型的菜单:



Main.sublime-menu
既所谓的顶部菜单,位于ST3菜单栏具体菜单下
Side Bar.sublime-menu
侧边栏菜单,当在侧边栏右键时弹出
Context.sublime-menu
当在文字区域内右键是弹出的上下文菜单



这里我定义了3中菜单:
Main.sublime-menu, 内容如下:
[
{
“id”: “tools”,
“children”: [
{
“caption”: “Mike Wang”,
“id”: “mike”,
“command”: “mike”
}
]
}
]



效果为:在菜单栏Tools下面有一个 Mike Wang的菜单项
Side Bar.sublime-menu, 内容如下:
[
{
“caption”: “Mike Wang”,
“command”: “mike”
}
]



效果为:在侧边栏右键是可以看到一个 Mike Wang的菜单项
Context.sublime-menu, 内容如下:
[
{
“id”: “mike”,
“command”: “mike”,
“caption”: “Mike Wang”
}
]



效果为:在文字区域右键有一个 Mike Wang的菜单项
很明显,这些文件都是以 json 数组的形式组织的,其内容表现为:



id
每一个菜单项的唯一标识
caption
相当于菜单的一个展示名称,所看到的效果
command
大小写敏感,所要执行的命令
children
用于定义子菜单



总结
到这里,一个简单的 ST3 插件就定义完毕,这里只是表现了一个插件的组织结构,并不具备什么有用的功能,因为这里并没有结合 ST3 的 API . 但千里之行始于足下,具备了完整的结构才可以继续开展壮大起来.


Category web