插件移植指南
版本
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 处于休眠状态,并将静默忽略任何发出的请求。