sublime text 默认不识别 .asm/.s 文件,需手动绑定语法、安装对应插件、定义 scope 并匹配主题;8086 汇编需自建 .sublime-syntax 文件,明确列出指令、段和寄存器,并确保主题支持该 scope。

Sublime Text 默认不识别 `.asm` 或 `.s` 文件为汇编语言,也不会自动高亮 8086、NASM、GAS 等风格的关键字——这不是插件没装好,是文件类型没绑定、语法定义不匹配、或 scope 没被主题渲染这三件事没做对。
点击右下角语法名手动切换,是最准的验证方式
打开一个 `.asm` 文件,右下角显示 “Plain Text” 或 “Shell-Unix” 就说明高亮根本没启动。此时不要急着装新插件,先点它 → 在弹出菜单里搜索并选中:Assembly (NASM)、Assembly (GAS) 或 ARM Assembly(取决于你写的汇编类型)。如果列表里没有这些选项,说明对应语法包没启用或没安装。
- 选错语法会导致指令标红(比如用 GAS 语法开 NASM 文件,
mov ax, 1会被当错误) - `.s` 文件特别容易被误判成 Shell,因为开头常有
#注释;临时删掉第一行再试切换 - 快捷键
Ctrl+Shift+P→ 输入Set Syntax: x86 (NASM)可绕过右下角菜单直接生效
必须手动绑定 .asm/.s 扩展名,否则下次打开还是白的
只手动切一次语法,关掉再打开又变回 Plain Text,是因为 Sublime 没记住这个后缀该用什么语法。要永久绑定:
- 在已正确设置语法的 `.asm` 文件标签上右键 →
Open all with current extension as… - 选中你刚用的那个语法项(如
Assembly (NASM)),勾选Apply to all .asm files - 对 `.s` 文件重复同样操作;若想全局覆盖,可编辑
Packages/User/Preferences.sublime-settings,加一行:"syntaxes": {"s": "Packages/Assembly (GAS)/GAS.sublime-syntax"} - 注意路径大小写敏感:
GAS.sublime-syntax≠gas.sublime-syntax,路径错就加载失败
8086 汇编全白?现有插件基本不支持,得自己写 .sublime-syntax
所有公开的 NASM/GAS 插件都面向 x86-64 或 Linux 内核汇编,它们的正则规则里没有 ax、data segment、assume cs:code、int 21h,也不支持大小写不敏感匹配——所以 MOV AX, 1 和 mov ax, 1 都不会着色。
- 别魔改插件源码:升级后会被覆盖,且 YAML 结构复杂易崩
- 正确做法:新建文件 → 保存为
Packages/User/8086.sublime-syntax(路径用Preferences → Browse Packages…打开) - 内容只需三块:
file_extensions填["asm"];contexts下加几条match规则,例如:- match: \b(?i)(mov|add|sub|jmp|je|jne|call|int)\b、- match: \b(?i)(data|stack|code)\s+segment\b、- match: \b(?i)(ax|bx|cx|dx|si|di|sp|bp|cs|ds|es|ss)\b - 寄存器必须逐个列,不能用
[a-z]{2}—— 否则会把变量名如buf、val也标蓝
寄存器/指令不显色?先用 Developer: Show Scope Name 看真实 scope
即使语法定义写了 ax,它也可能不着色。光标停在 ax 上,按 Ctrl+Shift+P → 输入 Developer: Show Scope Name,看输出是否含类似 variable.register.8086 的字段。没有就说明语法没覆盖;有但还是白的,就是主题没映射这个 scope。
- 换主题试试:
Monokai、Adaptive对低频 scope 兼容更好 - 查主题文件(
Packages/Theme - Default/monokai.tmTheme)里有没有对应variable.register.8086的<dict></dict>块;没有就加一个,设foreground颜色 - scope 名称必须完全一致:自定义语法里写的是
variable.register.8086,主题里就不能写成support.variable.register
最常被忽略的是:语法定义写了,文件也绑定了,但主题压根不认识你定义的新 scope;或者你改了 .sublime-syntax 却忘了重启 Sublime,导致缓存旧版本。改完记得重启,再用 Show Scope Name 确认真实生效路径。











