Sublime Text 无法原生支持 OT 算法,因其缺乏服务端协调能力;可行方案包括使用 CodeTogether 插件、对接 ShareDB 自定义插件,或通过远程开发间接实现协作。

Sublime Text 本身不内置实时协作编辑功能,也不原生支持 OT(Operational Transformation)算法。但可以通过插件生态与外部服务结合,实现近似实时协作的开发体验——关键在于理解“Sublime 是客户端,OT 需服务端协同”这一前提。
为什么 Sublime 不能直接跑 OT?
OT 算法要求多副本操作在服务端统一调度、转换、合并,并保证收敛性与一致性。这需要:一个中心化协调服务(如 ShareDB、TogetherJS 后端或自研 OT server)、操作日志持久化、客户端状态同步机制。Sublime 是本地优先、无运行时环境的编辑器,无法承载这些逻辑。
可行的协作方案(基于 Sublime + OT)
以下路径已在社区验证,兼顾实用性与技术合理性:
- 使用 CodeTogether 插件(推荐):它基于 VS Code 的 Live Share 协议封装,后端采用优化的 OT 变体;Sublime 用户可通过官方插件接入,支持光标共享、语音通话、终端协同,所有冲突由远端服务自动 resolve。
- 对接 ShareDB + 自定义 Sublime 插件:用 Python 编写 Sublime 插件监听 on_modified/on_selection_modified 事件,将用户操作(如 insert、delete、retain)序列化为 OT op 发送到 ShareDB;同时订阅变更流,反向应用 ops 到本地 buffer。需注意 Sublime API 不暴露完整 buffer 历史,需自行维护轻量 undo stack。
- 借助远程桌面/终端级协作(间接 OT):例如通过 VS Code Server + Live Share 开启协作会话,再用 Sublime 连接同一远程文件系统(NFS / SSHFS)。此时编辑发生在服务端,Sublime 充当只读/轻编辑前端,OT 由 VS Code 后端完成。
开发自研 OT 协作插件的关键细节
若你计划从零构建,需特别注意:
- Sublime 的 on_modified 事件不区分手动输入与 API 修改,建议加 debounce 并比对 view.substr(old_region) 和新内容,过滤掉非用户触发变更。
- OT 操作必须带 client_id + revision(或 timestamp),服务端据此排序和转换;Sublime 插件中可用 sublime.active_window().id() 或随机 UUID 标识客户端。
- 避免直接同步整行或整文件——应按字符粒度生成 ops,否则在高并发编辑下转换复杂度爆炸。参考 Google Wave 的 JSONOT 规范设计 op 结构。
基本上就这些。Sublime 的协作不是“能不能做”,而是“在哪做”——把 OT 放在服务端,让 Sublime 做好它最擅长的事:快速、稳定、低延迟地呈现与响应。










