文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

不,Python 不是大蟒蛇,而 Sublime Text 也不是 90 年代朋克乐队的模糊引用(至少在这种情景下不是)。相反,准备好在插件开发中感受惊奇吧,让程序为你而工作。

简介

我写这篇文章是希望你(像我一样)即将踏上一个崇高的旅程:尝试创建您的第一个 Sublime Text 3(ST3)插件。我先澄清一点,我对 ST3 插件开发并非十分擅长。但我会尽我最大的努力去理清在开发过程中的关键点,这些关键点(对我来说)可能会导致一些困惑。

第 1 段(可获 1.45 积分)

(对于那些不熟悉 ST3 的孩纸:它是“一个集成复杂的代码、标记和散文的文本编辑器”,它基于 ST2 上,当前还处于测试版本中。有关更多信息,请访问http://www.sublimetext.com)

下面的链接给出了 ST3 的文档引用,但里面的内容大部分是纯文本,开始时是会很难看得懂。但这像其他任何语言一样,它给出了一个需要密切关注的词汇表,以便你以后在上面学习更多前沿的东西。下面我便开始 ST2 插件的开发教程了,不过我发现一些使用的方法被废弃了,这可能会造成运行插件时错误。我真的从 Python 3 文档和 API 中学到了很多,我也希望在这里能教授给你。

第 2 段(可获 1.74 积分)

步骤 1 – 开始

所有的插件都以相同的方式开始:“嘿,如果这个漂亮的应用程序做出来了且不是很有意思…” 当我与同事谈论使用 Premailer 格式化电子邮件的 HTML时,这就是我的真实想法了。这个目标很简单,写一小段代码将 CSS 和 HTML 都发给 Premailer 并返回嵌有所有样式 HTML 代码即可。这和发送一个POST请求并接收响应一样简单。我很熟悉在PHP中如何使用 cURL,但我不确定 Python 会如何处理这些请求。结果却是令人惊讶的简单。

第 3 段(可获 1.4 积分)

开始的时候你需要做的一件事是 – 选择一个独特且具有描述性的名称。如果你打算把插件提交 ST3 插件存储库中去,你需要一个描绘插件功能的名字并使它能与其他插件区别开来。比如说我用了这么个名字 “cnPremailer.”

步骤 2 – 使用 ST3 插件开发者

一开始先打开 ST3,点击 “tools” 菜单并选择 “New Plugin.” 这将打开新的插件模板以便编辑。

tools_newplugin

保存之前你应该为你的插件在以下位置创建一个文件夹(这里的 “Username” 是指你自己实际的用户名):

第 4 段(可获 1.34 积分)
  • (OSX): Users\”Username”\Library\Application Support\Sublime Text 3\Packages
  • (WIN7): C:\Users\”Username”\AppData\Roaming\Sublime Text 3\Packages

在创建所需文件夹之后,便可以在上述位置将新插件保存为一个.py文件(比如说:cnpremailer.py)。你的插件会立即启动为可用状态(因为代码开始时有导入引用)。 ST3 也会扫描并验证你的插件。如果存在错误,则将会在控制台显示。这时如果你想打开控制台查看,你可以打开 “view” 菜单并点击“show console”(或使用菜单上定义的内置键盘快捷键)。

第 5 段(可获 1.53 积分)

View_and_Menubar

 

你将在屏幕的底部看到控制台:

console

 

默认的插件代码如下(至少在写这篇文章的时候):

import sublime, sublime_plugin

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

它的功能很简单:在文档的开始是一句经典的 “Hello, World!“。 要运行它则需打开控制台和输入:

view.run_command('example')

这将执行你的类并执行所请求的动作。你会注意到 ST3 自动解析类名 “examplecommand” 作为一条执行命令,因为它文本结束是 “Command”。一旦 ST3 检测到这一后缀,它会删除 “Command” 字段并将开始部分的小写作为实际名称(例如:ExampleCommand = example)。多个大写将导致单词之间的产生下划线分隔符。在我的例子中,cnPremailer 会变成 cn_premailer。与其每次都输入一个下划线,我会删除大写并使用 CnpremailerCommand 作为类名。在我的例子中,我快速重命名类然后如下所示保存:

第 6 段(可获 2.15 积分)
import sublime, sublime_plugin

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

无论你决定如何命名你的类名,你都需要在下一步中用到它。

步骤 3 – 创建菜单并绑定快捷键

 在 ST3 中通过菜单或绑定快捷键的方式运行插件是很容易的事情(例如:cmd + shift + p)。前者比后者更简单,绑定快捷键时需要特定操作系统的设置,但它不复杂,而且比较灵活。

第 7 段(可获 0.96 积分)

要创建一个菜单项,首先需要决定放在哪个地方好。你有三个选择,与其相应的文件名如下:

  1. Main.sublime-menu
  2. Side Bar.sublime-menu
  3. Context.sublime-menu

“Main”是ST3的菜单栏, “Side Bar” 是当你右键单击一个文件或文件夹时左边弹出的应用程序 (打开单独的文件时没有显示),“Context” 是在文本区域上的右键菜单. 这些都遵循相同的格式,要添加一个条目,你只需添加如下代码到文件中,然后以适当的名称保存它即可。下面是一个例子:

第 8 段(可获 1.33 积分)
[
{
    "id" : "cnPremailer",
    "caption" : "cnPremailer",
    "command" : "cnpremailer"
}
]

正如你所看到的:这是一个使用简单数组的基本JSON数组。

  • “id” 你的条目的基本菜单标识
  • “caption” 是一个显示标签(如果没有提供将默认为命令名)
  • “command” 是来自你类名的命令,它区分大小写 (如上面提到的那样)

你也可以如下般使用 “children” 条目做子菜单选项:

[
{
	"id" : "cnPremailer",
	"caption": "cnPremailer",
	"children":
	[
	{
		"caption" : "run",
		"command" : "cnpremailer"
	}
	]
}
]
第 9 段(可获 0.79 积分)

记住这些数组需要正确格式化,所以如果你添加一个额外的逗号(或忘记加)菜单会停止工作,当 ST3 自动编译你的插件时会抛错误。

绑定快捷键也是相似的,但需要遵循下面的结构,插件才可以在匹配操作系统中运行:

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

如果你不想让你的插件在其他 OS 上绑定快捷键的话,也就是说这个插件只想给自己用,则你不需要全部定义。你可以简单地创建与你正在使用的操作系统相匹配的文件即可。然后简单地添加一个 JSON 字符串到文件中,以映射到你希望使用的快捷键。

第 10 段(可获 1.75 积分)

你可能想查看默认的按键绑定列表以确保你没有覆盖其他的绑定。这位于菜单栏上的:

  • (OSX) “Sublime Text” >  “Preferences” > “Key Bindings – Default”
  • (Windows) “Preferences” > “Key Bindings – Default”

你还应该检查你已安装的其他插件的按键绑定,以避免冲突。我在 OSX 下使用如下代码,因为我的同事Windows或Linux的:

[
{ 
	"keys": ["super+shift+c"],
	"command": "cnpremailer"
}
]

对于OSX, “super”是常用于命令键。之后,我只列出命令和保存。你还会注意到,ST3 会自动在你的菜单上添加按键绑定命令(如果你已经创建了),以便插件的用户在忘记时可以参考。

第 11 段(可获 1.61 积分)

popup_and_Default__OSX__sublime-keymap

现在,完成插件菜单、快捷键保存配置之后,你已经准备好开始真正的乐趣。请继续关注第2部分——操纵文本区域和发送数据。

第 12 段(可获 0.41 积分)

文章评论