迁移指南
概述
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