st3与st4插件不兼容的根本原因是python版本升级(3.3→3.8+)、eventlistener行为变更、urllib2模块移除及依赖库强制更新;判断依据是package-control.json中的"sublime_text"字段值。

ST3 和 ST4 插件不兼容的根本原因
Sublime Text 4 默认使用 Python 3.8+ 运行时,而 ST3 是 Python 3.3;sublime_plugin.EventListener 行为有变更,urllib2 模块彻底消失,sublime_lib 和 mdpopups 等依赖库也强制要求新版。插件若未声明 "sublime_text": ">=4107"(ST4 起始 build),或仍在用 import urllib2,在 ST4 中会直接报 ImportError: No module named 'urllib2'。
判断依据不是插件名或 GitHub star 数,而是看其 package-control.json 文件里的 sublime_text 字段——比如值为 ">=3126" 可跑 ST3,">=4107" 则 ST3 完全无法加载。
手动安装指定版本插件的可靠路径
Package Control 不支持安装历史版本,所谓“Add Repository + Install Package”基本无效,公开 channel 几乎只推最新版。真正能落地的方式只有手动克隆指定 tag 或 commit:
- 先关掉 Sublime Text,避免文件被锁
- 进
Packages/目录(Preferences → Browse Packages…) - 用
git clone --depth 1 -b v2.4.1 https://github.com/sergeche/emmet-sublime.git Emmet—— 注意最后的文件夹名Emmet必须和插件名一致,不能带后缀 - 若仓库没打 tag,改用 commit hash:
git clone --depth 1 --branch 4a9f3c2 https://github.com/facelessuser/SublimeLinter.git SublimeLinter - 克隆完立刻删掉
.git/文件夹,否则 Sublime 可能因权限或加载冲突拒绝识别
升级到 ST4 前必须做的三件事
别直接覆盖安装,ST3 和 ST4 的配置目录、注册表项、Python 运行时完全隔离,强行覆盖等于丢配置。
- 卸载 ST3 后,从
sublimetext.com/4下载对应系统最新 build(如sublime_text_build_4169_x64_setup.exe),安装时务必勾选Add to explorer context menu和Add to PATH - 运行
Package Control: List Packages记下所有已装插件,逐个查其 GitHub 页面是否标注 “ST4 compatible” 或 release 时间晚于 2021 年 5 月 - 迁移配置时只复制
Packages/User/下的内容;自定义构建系统若放在Packages/MyBuild/这类非 User 目录,必须手动拷贝,否则丢失
阻止自动升级导致版本错乱
手动装好旧版插件后,Package Control 仍可能在后台偷偷升级它——尤其当你执行 Package Control: Upgrade Package 或开启自动更新时。
在 Preferences → Package Settings → Package Control → Settings – User 中添加:
{
"auto_upgrade_ignore": [
"Emmet",
"SublimeLinter"
]
}
这个列表必须写插件文件夹名(不是显示名),且大小写敏感;漏写或拼错会导致禁用失效。一旦加了,后续所有 Upgrade Package 操作都不会碰这些插件。
最易忽略的是:插件目录名和 auto_upgrade_ignore 里写的名称必须完全一致,比如你克隆的是 Emmet 文件夹,就不能写成 emmet-sublime 或 Emmet Sublime —— Sublime 加载器只认文件夹名。











