迁移指南

概述

Sublime Text 3在插件上与Sublime Text 2相比有很大的不同,大多数的插件至少都需要做少量的迁移工作。 有下面这些变化:

  • Python 3.3
  • Out of Process Plugins(进程插件)
  • Asynchronous Events(匿名事件)
  • 受限制的begin_edit()和end_edit()
  • Zip压缩的Packages
  • Importing Modules(引入模块)

    Python 3.3

Sublime Text 3使用Python 3.3,而Sublime Text 2使用的是Python 2.6。此外,OS X系统下,不在使用系统的Python构建工具,而使用Sublime Text自己的。Windows和Linux跟原来一样绑定到自己的版本。

Out of Process Plugins

插件现在运行在一个独立的进程,plugin_host。从插件作者的角度来看没什么区别,除了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()不再是可以直接访问,除了在某些特定情况下。获取一个有效的编辑器对象的唯一方法是把你的代码放在TextCommand的一个子类里。通常,TextCommand中大部分代码可以放在begin_edit()和end_edit()之间进行重构,然后在这个TextCommand上调用run_command。

这种方式可以消除空荡的Edit对象,并且确保重复命令和宏正常工作。

Zip压缩的包

Sublime Text 3中的Packages可以直接通过.sublime-package格式文件运行(其实就是.zip重命名的格式), 而Sublime Text 2是未zip压缩运行的。

跟大多数改变相比这不会导致什么变化,重要的一点是,你要访问packgae中的文件时需要注意。

Importing Modules

引入其他插件在Sublime Text 3中会更加的简单和稳定,而且可以使用规整的引入声明,例如import Default.comment将会引入Packages/Default/Comment.py

启动时API使用会受限制

由于plugin_host载入是异步的,在载入时Sublime Text的 API将不可用。这就意味着你的模块里所有top-level的声明都不能调用sublime模块的方法。在启动期间,API是休眠状态,将忽略所有调用请求。

原文:

http://feliving.github.io/Sublime-Text-3-Documentation/porting_guide.html