http://docs.sublimetext.info/en/latest/extensibility/plugins.html
https://clarknikdelpowell.com/blog/creating-sublime-text-3-plugins-part-1/
Sublime Text 3 (ST3) 作為我工作之后的唯一編輯器, 已經徹底征服了我的心,它非凡的性能變現(xiàn)以及眾多插件的擴展性,已經讓我欲罷不能了.每一個獨特功能的插件都加速了我的日常工作,這使我萌生了自定義插件的想法.
關于插件
ST3的插件以文件的形式組織,它會在3個目錄搜索插件:
- Installed Packages
- Packages
- Packages/pkg_name/
但是如果Packages下文件嵌套太深,插件將不會被load
另外,ST3 的插件是已Python編寫的,這要求你需要知道如何使用Python3
自定義插件
環(huán)境
- x86_64 GNU/Linux
- Sublime Text 3
- Python 3+
添加插件
首先新建一個插件
- 點擊
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! 表示插件已經添加成功
插件命令的解析規(guī)則很簡單, 命令名稱 + Command 構成class, 當然這里的命令名稱是首字母大寫的,但是執(zhí)行的時候會轉化為小寫的,例如:
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則表示所要執(zhí)行的命令.
為插件添加菜單
ST3支持3種類型的菜單:
- Main.sublime-menu
既所謂的頂部菜單,位于ST3菜單欄具體菜單下 - Side Bar.sublime-menu
側邊欄菜單,當在側邊欄右鍵時彈出 - Context.sublime-menu
當在文字區(qū)域內右鍵是彈出的上下文菜單
這里我定義了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"
}
]
效果為:在文字區(qū)域右鍵有一個 Mike Wang的菜單項
很明顯,這些文件都是以 json 數組的形式組織的,其內容表現(xiàn)為:
- id
每一個菜單項的唯一標識 - caption
相當于菜單的一個展示名稱,所看到的效果 - command
大小寫敏感,所要執(zhí)行的命令 - children
用于定義子菜單
總結
到這里,一個簡單的 ST3 插件就定義完畢,這里只是表現(xiàn)了一個插件的組織結構,并不具備什么有用的功能,因為這里并沒有結合 ST3 的 API . 但千里之行始于足下,具備了完整的結構才可以繼續(xù)開展壯大起來.
更多技術細節(jié):
http://www.sublimetext.com/docs/3/api_reference.html
http://www.sublimetext.com/docs/api-reference
http://docs.sublimetext.info/en/latest/reference/reference.html