Sublime插件报错应优先查看控制台最顶行堆栈定位问题插件,如“File './Packages/XXX/xxx.py'”中的XXX即插件名;禁用须通过Package Control流程并重启,且需检查ignored_packages配置。

Sublime 插件报错不是随机事件,绝大多数能通过控制台第一行堆栈精准定位到具体插件文件,而不是靠猜或全禁用。
看控制台最顶行堆栈定位问题插件
弹窗报错(比如 plugin_host has exited unexpectedly)只是崩溃结果,真正线索在控制台里。按 Ctrl + ` 打开后,**直接盯住最上面那行 File "./Packages/XXX/xxx.py"** —— 这个 XXX 就是问题插件名。
- 如果堆栈含
ImportError: cannot import name 'create_connection',说明插件误用了标准库函数,Sublime 的嵌入 Python 不提供这个符号 - 出现
ssl、certifi、urlopen相关错误,大概率是 Package Control 自身网络层失败,和你装的插件无关 - 末尾报
NoneType is not callable,通常是插件主文件里某个回调函数(如on_activated)被删了或没定义 - 别只扫一眼弹窗标题,控制台里早有十几次静默
AttributeError,直到某次触发崩溃才弹出来
禁用插件必须走 Package Control 流程
手动删 Packages/SomePlugin 文件夹是危险操作:容易漏掉 Installed Packages/SomePlugin.sublime-package,下次启动时 Sublime 又加载压缩包,冲突复现。
- 正确做法:菜单
Preferences → Package Control → Disable Package,选中插件名,**必须重启 Sublime** 才生效 - 禁用后弹窗还在?检查控制台是否还有同名插件的日志——可能是大小写不同(
emmet和Emmet被当两个插件) - 禁用后弹窗变少但没根除?说明存在依赖链,比如 A 插件依赖 B,B 崩溃导致 A 报错,得从底层插件开始禁用
插件装上了却不生效?先查 ignored_packages
命令面板搜不到、快捷键无效、右键无菜单,不是“没装成”,而是 Sublime 在后台悄悄跳过了它——常见于路径放错、签名异常或 API 版本不匹配,自动加进 ignored_packages 列表。
- 打开控制台,搜
ignored_packages或disabled packages,看输出里有没有你的插件名 - 编辑
Preferences → Settings – User,找到"ignored_packages"这一行,整行删掉,或从中移除对应插件名(如"SideBarEnhancements") -
.sublime-package文件必须放进Installed Packages/;解压后的文件夹必须整体放进Packages/根目录,不能嵌套进子目录 - 插件文件夹名必须严格匹配原始仓库名:不能带空格、中文、点号开头、连续下划线(
my plugin→myplugin,emmylua_v2.0→emmylua)
Package Control 自身出问题怎么办
报 There are no packages available 或安装卡在 “Loading…”,八成不是插件问题,而是 Package Control 拿不到 channel 数据。
- 打开
Preferences → Package Settings → Package Control → Settings – User,检查"channels"是否为空或只有旧地址(如"https://packagecontrol.io/channel_v3.json") - 把该 URL 粘到浏览器访问——打不开就换国内镜像:
"https://gitee.com/azl397985856/package_control_channel/raw/master/channel_v3.json" - SSL 报错(
CERTIFICATE_VERIFY_FAILED)?先校准系统时间(误差 >5 分钟必触发),再替换Packages/Package Control/certifi/cacert.pem为最新证书 - 控制台执行
import urllib.request报错?说明 Package Control 根本没装好,需重跑官方安装脚本并重启
最常被忽略的是:Sublime 不会热重载 ignored_packages 或 channel 配置,改完不重启等于白改;另外,ST4 的嵌入 Python 是 3.3.6(build 4143 及之前),用 pathlib.Path().is_file() 或 asyncio.run() 会直接 NameError,连错误堆栈都可能不完整。

















