插件
另请参阅
API 参考 : 关于 Python API 的更多信息。
插件是继承自 sublime_plugin 模块中的 *Command 或 *Listener 类 的 Python 脚本。
插件存储位置
Sublime Text 会在以下位置查找插件
PackagesPackages/<pkg_name>.sublime-package文件
嵌套在 Packages 中更深层的插件文件将不会被加载。
所有插件都应该放在自己的文件夹中,而不是直接放在 Packages 下。这样可以避免 Sublime Text 在尝试对包进行排序以加载时出现混淆。
命令命名约定
按照惯例,Sublime Text 命令类名以 Command 结尾,并以 NamesLikeThisCommand 的形式编写。
但是,命令名称会自动从 NamesLikeThisCommand 转换为 name_like_this。因此,ExampleCommand 将变为 example,而 AnotherExampleCommand 将变为 another_example。
在定义命令的类的名称中,使用 NameLikeThisCommand。要从 API 调用命令,请使用标准化的 name_like_this。
命令类型
sublime_plugin.ApplicationCommandsublime_plugin.WindowCommandsublime_plugin.TextCommand
WindowCommand 的实例有一个指向创建它们的窗口实例的 .window 属性。类似地,TextCommand 的实例有一个 .view 属性。ApplicationCommand 实例没有这两个属性。
命令的共享特性
所有命令都必须实现 .run() 方法。
所有命令还可以提供方法来更改它们的可见性、启用状态、菜单中的默认标题,甚至它们的名称(不建议这样做)。
如何从 API 调用命令
根据命令的类型,使用对 View 或 Window 的引用,并调用 <object>.run_command('command_name')。除了命令的名称之外,.run_command 还接受一个字典,其键是该命令的有效参数的名称
window.run_command("echo", {"Tempus": "Irreparabile", "Fugit": "."})传递给命令的所有用户提供的参数必须是 JSON 可序列化的。这包括字符串、整数、浮点数、布尔值、None 以及递归列表和字典类型。映射键必须是字符串。
文本命令和 edit 对象
文本命令会收到 Sublime Text 传递给它们的 edit 对象。
在 edit 中执行的所有操作都将被分组为单个撤销操作。当最外层的编辑操作完成时,将调用回调函数,例如 on_modified() 和 on_selection_modified()。
edit 对象的生命周期完全由 Sublime Text 内部管理。插件作者必须确保在文本命令的 run() 方法中执行所有编辑操作,以确保宏和重复命令按预期工作。
响应事件
任何 EventListener 的子类都可以响应事件。您不能让一个类同时继承自 EventListener 和任何其他类型的命令。
警告
事件监听器中的昂贵操作会导致 Sublime Text 变得无响应,尤其是在频繁触发的事件中,例如 on_modified() 和 on_selection_modified()。请谨慎考虑在这些事件中完成的工作量,并且不要实现您不需要的事件,即使它们只是 pass。
Sublime Text 和 Python 标准库
默认发行版中最重要的缺失是 tkinter 模块。否则,您可以访问 Sublime Text 附带的 Python 版本的整个 Python 标准库。
自动插件重新加载
Sublime Text 会在最顶层的 Python 模块发生变化时重新加载它们(可能是因为您正在编辑 Packages 中的 .py 文件)。相比之下,Python 子包不会自动重新加载,这在您开发插件时可能会导致混淆。一般来说,最好在您对插件文件进行更改后重新启动 Sublime Text,以便所有更改都能生效。