Sublime Text 无法原生支持 WebSocket 实时同步,因其插件 API 不提供网络 I/O 接口,所有网络调用均被沙箱限制;实际可行方案是通过保存事件触发外部 WebSocket 中继服务。

Sublime Text 本身不支持 WebSocket 实时同步,任何所谓“内置 WebSocket 同步”都是误解或混淆了插件能力。
为什么 Sublime Text 无法原生建立 WebSocket 连接
Sublime Text 的插件 API(sublime_plugin)不暴露网络 I/O 能力,没有 WebSocket、fetch 或 socket 接口;所有插件运行在受限的 Python 沙箱中,不能发起任意 TCP 连接。试图用 urllib 或 requests 发起长连接也会被阻塞或超时——这不是配置问题,是架构限制。
- 官方明确禁止插件执行阻塞式网络调用,否则会卡死 UI 线程
- 即使绕过限制用子进程启动外部 WebSocket 客户端(如
websocat),也无法把消息实时注入编辑器视图或触发保存/跳转等动作 - 所谓“实时同步”,实际依赖的是文件系统事件(
on_post_save)+ 外部服务中转,不是浏览器那种双向持久连接
可行替代方案:用保存事件触发 WebSocket 中继
真正能落地的做法,是让 Sublime Text 在保存文件时,通过命令行工具把内容推给一个已运行的 WebSocket 服务端(比如用 Node.js 或 Python + websockets 写的中转服务),再由该服务广播给其他客户端。
- 安装插件
SublimeOnSaveBuilder或直接写EventListener监听on_post_save - 在回调里调用
subprocess.Popen执行类似这样的命令:echo '{"file":"a.py","content":"..."}' | websocat ws://localhost:8080/push - 服务端需自行实现鉴权、消息路由和冲突处理——Sublime 不参与状态同步逻辑
- 注意:Windows 上
subprocess默认不继承环境变量,websocat路径需写绝对路径,否则报FileNotFoundError
常见错误:误以为 LiveServer 或 Sync Settings 插件能做 WebSocket 同步
LiveServer 只是起本地 HTTP 服务并自动刷新浏览器,不涉及 Sublime 与其他编辑器之间的数据同步;Sync Settings 基于 GitHub Gist,走 HTTPS 轮询,延迟高且无实时性。两者都跟 WebSocket 无关,也做不到跨设备编辑状态同步。
- 搜索 “sublime websocket plugin” 找到的多数项目早已停止维护,源码里根本没有
websocket实际调用,只是名字唬人 - 部分插件用
http.server模块起简易服务器,但这是 HTTP,不是 WebSocket,协议不兼容 - 如果看到插件文档里出现
ws://示例却没说明如何启动后端服务,基本可以判定不可用
真正的难点不在 Sublime 这一端,而在于你得自己搭一套带状态管理的 WebSocket 服务,并解决多光标、撤销栈、局部修改 diff 等编辑器特有状态的序列化与合并——Sublime 不提供这些能力的钩子,也没打算提供。

















