<p>右下角显示 Plain Text 说明高亮未生效,需点击切换为 x86 (NASM) 或 x86 (GAS);若菜单无选项则启用 EnhancedAssembly 等插件;.s 和 .S 需分别绑定,且 .s 开头含 # 会被误判为 Shell;构建 selector 必须与语法 scope 严格匹配。</p>

右下角显示 Plain Text 就说明高亮根本没生效
这不是插件没装,是 Sublime 压根没把当前文件当汇编处理。点右下角状态栏文字(比如“Plain Text”),在弹出菜单里搜 x86 (NASM)、x86 (GAS) 或 Assembly (NASM) ——选中即立刻变色。如果菜单里压根没有这些项,说明插件被禁用:Ctrl+Shift+P → 输入 Package Control: Enable Package → 搜索并启用 EnhancedAssembly 或 NASM Assembly。
注意:.s 和 .S 是两个独立后缀,必须分别绑定;.s 文件开头若有 #include 或 # 注释,Sublime 会优先识别为 ShellScript,寄存器(如 %rax)和指令(如 movq)全无颜色。临时解法:Ctrl+Shift+P → Set Syntax: x86 (GAS);永久解法:右键文件标签 → Open all with current extension as… → 选 EnhancedAssembly → x86 (GAS)(大小写、空格必须完全一致)。
构建系统 selector 必须和语法 scope 严格匹配
自定义 nasm.sublime-build 时,selector 字段必须与你手动设置的语法 scope 完全一致。比如你选的是 Assembly (NASM),那 selector 应为 source.asm.nasm;若用的是 EnhancedAssembly → x86 (GAS),则 selector 得写成 source.gas。不一致会导致 Build 菜单里找不到对应项,或按 Ctrl+B 后毫无反应。
-
nasm -f elf64 hello.asm -o hello.o和ld hello.o -o hello这两步不能合并进一个cmd,得拆成variants(如 “Compile”、“Link”、“Run”) -
shell设为true才能正确执行管道或连续命令(如ld … && ./hello) - Windows 下用 MASM,
cmd要调用ml.exe和link16.exe,路径含空格必须加引号,且encoding设为cp936才能捕获中文错误信息
寄存器/新指令不着色?不是配错了,是语法包没定义这个词
光标停在 vmovdqa 或 csrrw 上,Ctrl+Shift+P → Developer: Show Scope Name,如果输出里不含 support.instruction 或 variable.register 类 scope,说明当前语法文件根本没收录该 token。NASM 插件默认不认 RISC-V 的 csrrw,GAS 插件默认不认 AVX-512 的 vaddpd。
宏(如 %define BUF_SIZE 4096)也不着色,因为语法里没定义 meta.preprocessor.nasm scope;主题也可能导致“写了却看不见”——换用 Monokai 或 Adaptive 主题再试一次 Show Scope Name。
构建系统能跑通 ≠ 代码能运行
Sublime 只负责调外部工具,它不检查链接入口、平台 ABI 或段声明是否合法。常见失败现象:
-
ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000:NASM 默认用_start,Linux 下写section .text后漏了global _start -
undefined reference to 'main':误用 C 链接方式(gcc hello.o -o hello)编译纯汇编,但没提供 C runtime 支持 -
Segmentation fault (core dumped):x86-64 下用mov eax, 1写 32 位寄存器,但实际运行在 64 位模式,应改用mov rax, 1或确保目标格式(-f elf64)与指令宽度一致
真正关键的不是 Sublime 配置对不对,而是你写的那几行汇编本身能不能过 nasm/as + ld/gcc 这关——Sublime 只是把终端命令封装了一下而已。


















