sublime text 默认不支持 mips 汇编高亮,根本原因是缺乏识别 mips 指令的语法包;需安装并启用“mips assembly”插件,手动绑定 .s/.s 文件语法,必要时自定义 .sublime-syntax 文件补充指令正则。

Sublime Text 默认不支持 MIPS 汇编高亮,装完插件也不亮,根本原因不是插件没装,而是没有对应语法包,或已装的包根本不识别 mips、lw、addiu 这类词——它连 scope 都不生成,自然无法着色。
为什么右下角始终显示 Plain Text 或 ShellScript
Sublime 不内置 MIPS 语法,也不会自动把 .s 或 .asm 文件当 MIPS 处理。哪怕你装了通用 Assembly 插件,它默认只覆盖 x86/NASM/GAS/ARM,MIPS 完全不在其词表里。
常见现象:
- 打开
hello.s,右下角显示ShellScript(因文件以#开头) - 手动点击右下角 → 搜索
MIPS,菜单里空空如也 -
lw $t0, 0($s0)全是黑白,光标停在lw上按Ctrl+Shift+P→Developer: Show Scope Name,输出只有source.shell或source.asm,没有support.instruction.mips
必须用第三方语法包,且要手动启用
目前维护较活跃、明确支持 MIPS 的语法包只有两个:MIPS Assembly(GitHub 名 sublime-mips)和 EnhancedAssembly(需手动启用 MIPS 子语法)。
实操建议:
- 按
Ctrl+Shift+P→ 输入Package Control: Install Package→ 搜MIPS Assembly→ 安装(注意名称含空格和大小写) - 若安装后右下角仍无
MIPS Assembly选项:再按Ctrl+Shift+P→Package Control: Enable Package→ 搜索并勾选MIPS Assembly - 别装
Assembly Language Support或ASM Language—— 它们压根没定义 MIPS 指令集,装了也白装 - 安装完重启 Sublime 或执行
Ctrl+Shift+P→Reload Syntax Definitions
.s 文件绑定 MIPS 语法失败?先清掉 ShellScript 干扰
.s 文件开头带 # 注释时,Sublime 会跳过所有后缀规则,直接 fallback 到 ShellScript。此时即使语法包已启用,手动切换也常失败。
临时解法:
- 删掉第一行
#注释(或改成/* */风格) - 按
Ctrl+Shift+P→ 输入Set Syntax: MIPS Assembly回车
永久解法:
- 右键文件标签页 →
Open all with current extension as…→ 选MIPS Assembly(注意名称完全一致,不能多空格少括号) -
.S(大写)必须单独绑定一次,Sublime 不继承小写规则 - 若仍无效,在
Preferences → Settings – Syntax Specific中加一行:"syntax": "Packages/MIPS Assembly/syntaxes/mips.sublime-syntax"
lw、addiu 等指令不着色?大概率是语法包没收录或 scope 不匹配
不是你配错了,是当前 MIPS Assembly 包的原始 .sublime-syntax 文件里,instructions 规则没包含你用的指令变体(比如只收了 addu,没收 addiu;或只支持 32-bit,没覆盖 mips64 的 ld/sd)。
验证方式:
- 光标停在
addiu上 →Ctrl+Shift+P→Developer: Show Scope Name - 如果输出不含
support.instruction.mips,说明语法未捕获该 token
安全自定义方法:
- 装
PackageResourceViewer插件 →Ctrl+Shift+P→PackageResourceViewer: Open Resource→ 选MIPS Assembly→syntaxes/mips.sublime-syntax - 复制整个内容 → 新建文件粘贴 → 保存到
Packages/User/MyMIPS.sublime-syntax - 在
contexts下的instructions规则里加正则,例如:- match: \b(addiu|lw|sw|bne|j)\b - 保存后,右下角手动切到
MyMIPS(需在菜单里找,名称即文件名前缀)
真正容易被忽略的是:MIPS 有多种 ABI(o32/n32/n64)、多种汇编器(gas vs llvm-mc),语法包通常只覆盖一种。如果你用的是 llvm-mc 输出的指令(如 addi $t0, $t1, 1),原生 MIPS Assembly 包大概率不认——得自己补正则,或换用专为 llvm 设计的语法包。











