sublime text 4升级后插件报“module 'sublime' has no attribute 'version'”是因旧插件仍调用已移除的sublime.version属性,需禁用旧插件、改用适配st4的nasm或gas语法包,并检查ignored_packages、重载语法定义、确保构建系统selector与实际scope匹配。

插件报错显示“module 'sublime' has no attribute 'version'”
这是 Sublime Text 4(Build 4166+)升级后最典型的插件兼容问题:旧版汇编高亮插件(如早期 Assembly (NASM) 或 GNU Assembly Syntax Highlighting)仍用 sublime.version 检查版本,但 ST4 已移除此属性,直接抛出 AttributeError,导致语法加载失败、右下角始终显示 Plain Text。
- 打开控制台(
Ctrl + `),确认错误首行是否含sublime.version或has no attribute 'version' - 禁用该插件:
Ctrl+Shift+P→Package Control: Disable Package→ 输入插件全名(注意括号,如Assembly (NASM)) - 不要手动删文件夹——ST4 会缓存已禁用插件的元数据,重启也不清;必须通过 Package Control 禁用才生效
- 改用维护活跃的替代方案:
NASM Syntax(GitHub 名sublime-nasm)或GAS Syntax(作者lunixbochs),它们已适配 ST4 的sublime_api_version检查逻辑
启用插件后右下角仍无 Assembly 选项
不是没装,是被 ignored_packages 静默屏蔽了。ST4 启动时若检测到插件 API 版本不匹配或签名异常,会自动把它塞进 ignored_packages 列表,且不提示——你点右下角永远找不到 x86 (GAS)。
- 打开
Preferences → Settings,检查右侧用户设置中是否有"ignored_packages": [...]字段 - 逐个核对其中条目:大小写必须完全一致(
"Assembly (NASM)"≠"assembly"),空格不能多也不能少 - 删掉疑似项后,**必须执行**
Ctrl+Shift+P→Reload Syntax Definitions(重启 Sublime 不够) - 重载后立刻按
Ctrl+Shift+P输入Set Syntax: x86 (GAS)测试是否出现——若仍无,说明插件根本未注册,需换源重装
寄存器/新指令(如 vmovdqa、csrrw)不着色
这不是插件报错,而是语法定义本身缺失。插件能跑,但 scope 没覆盖这些词,Developer: Show Scope Name 会显示 source.asm 而非 support.instruction.x86_64。
- 先确认插件已更新:
Ctrl+Shift+P→Package Control: Upgrade Package→ 单独选中你的汇编插件 - 别改
Packages/下原始.sublime-syntax文件——升级会覆盖,且 YAML 格式错一个缩进就整包失效 - 安全做法:用
PackageResourceViewer提取原语法 → 复制到Packages/User/MyGAS.sublime-syntax→ 只在instructions规则里加一行正则:- match: \b(csrrw|vmovdqa)\b - 加完保存,再执行
Reload Syntax Definitions,否则新规则不生效
构建系统触发失败,但高亮正常
高亮和构建是两套机制:高亮靠语法 scope,构建靠构建系统里的 selector 字段。常见错误是 selector 写成 source.asm,而实际语法 ID 是 source.nasm 或 source.gas。
- 光标停在汇编代码上,
Ctrl+Shift+P→Developer: Show Scope Name,记下首段 scope(如source.nasm) - 打开构建系统(
Tools → Build System → New Build System),确保"selector"值与上一步完全一致 - 若用
source.nasm,但构建系统写source.asm,Ctrl+B就不会调用该构建——哪怕高亮全绿也无效 - Linux/macOS 下还常因 PATH 问题报
sh: nasm: command not found:Sublime 不继承 shell PATH,必须从终端执行subl .启动才能读到 Homebrew 或本地 bin 路径
真正容易被忽略的是:ST4 对语法包的加载更严格,一次 Reload Syntax Definitions 不一定能清掉所有缓存;如果改了 Packages/User/ 下的自定义语法,又切回原插件,得连着执行两次重载才稳定。











