插件移植指南
版本

Sublime Text 3 在插件方面与 Sublime Text 2 有些重要区别,大多数插件都需要进行一些移植才能正常工作。这些变化包括:

Python 3.3🔗

Sublime Text 3 使用 Python 3.3,而 Sublime Text 2 使用 Python 2.6。此外,在 Mac 上,不再使用系统的 Python 版本,而是将 Sublime Text 与其自身的版本捆绑在一起。Windows 和 Linux 也与它们自己的版本捆绑在一起,就像以前一样。

进程外插件🔗

插件现在在单独的进程 plugin_host 中运行。从插件作者的角度来看,应该没有可观察到的区别,除了插件主机中的崩溃不再会使主应用程序崩溃。

异步事件🔗

在 Sublime Text 2 中,只有 set_timeout() 方法是线程安全的。在 Sublime Text 3 中,每个 API 方法都是线程安全的。此外,现在有异步事件处理程序,使编写非阻塞代码更容易

  • on_modified_async()

  • on_selection_modified_async()

  • on_pre_save_async()

  • on_post_save_async()

  • on_activated_async()

  • on_deactivated_async()

  • on_new_async()

  • on_load_async()

  • on_clone_async()

  • set_timeout_async()

在编写线程代码时,请记住,缓冲区会在您的函数运行时发生变化。

受限的 begin_edit()end_edit()🔗

begin_end()end_edit() 现在不再可以直接访问,除非在某些特殊情况下。获得 sublime.Edit 对象的有效实例的唯一方法是将您的代码放在 sublime_plugin.TextCommand 子类中。通常,大多数代码可以通过将代码放在 begin_edit()end_edit() 之间,然后通过 run_command() 运行命令来重构。

这种方法消除了悬挂的 sublime.Edit 对象的问题,并确保重复命令和宏按预期工作。

压缩包🔗

Sublime Text 3 中的包可以直接从 .sublime-package(即重命名的 .zip 文件)文件运行,与 Sublime Text 2 不同,Sublime Text 2 在运行之前会解压缩它们。

虽然在大多数情况下,这应该不会导致任何差异,但如果您正在访问包中的文件,请务必牢记这一点。

导入模块🔗

在 Sublime Text 3 中,导入其他插件更简单、更健壮,可以使用常规的导入语句,例如,import Default.comment 将导入 Packages/Default/Comment.py

启动时受限的 API 使用🔗

由于 plugin_host 是异步加载的,因此在导入时无法使用 API。这意味着模块中的所有顶层语句都不得调用来自 sublime 模块的任何函数。在启动期间,API 处于休眠状态,并将静默忽略任何发出的请求。