Sublime Text 默认不支持 .cs 和 .shader 文件语法高亮,需手动安装对应插件并显式绑定语法:.cs 文件应通过右下角菜单选“Open all with current extension as → C#”,或在用户设置中配置 extensions_to_syntax;.shader 文件须安装 ShaderLanguages 插件后,右下角选择“ShaderLanguages → Unity ShaderLab”,否则仅显示为纯文本。

Sublime Text 本身不支持 C# 和 Unity Shader 的开箱即用高亮,必须手动安装语法包并显式关联文件类型,否则 .cs 和 .shader 文件只会显示为纯文本。
如何让 .cs 文件正确高亮(C# 语法)
Sublime Text 默认识别 .cs 为“C++”或“Plain Text”,需主动绑定语法。即使装了 C# 插件,若未设置关联,高亮仍不生效。
- 打开任意
.cs文件 → 点击右下角当前语法名称(如 “Plain Text”)→ 选择 Open all with current extension as → C# - 更彻底的做法:在
Preferences → Settings用户配置中加入:"extensions_to_syntax": {"cs": "Packages/C#/C#.sublime-syntax"}(适用于 ST4;ST3 用户请用Packages/C#/C#.tmLanguage) - 注意:部分旧版 C# 插件(如 “C# Snippets”)仅提供代码片段,不带语法定义,需额外安装
C#或OmniSharp类插件才能获得完整高亮
如何让 .shader 文件启用 Unity ShaderLab 高亮
Unity 的 .shader 文件是 ShaderLab 语法混合 CG/HLSL 片段,普通 GLSL 或 HLSL 插件无法覆盖全部关键字(比如 SubShader、GrabPass、UsePass),必须使用专为 Unity 设计的语法包。
- 通过
Ctrl+Shift+P→ 输入Install Package→ 搜索并安装UnityShader或ShaderLanguages(后者更活跃,持续更新) - 安装后,打开
.shader文件 → 右下角点击语法名 → 选择 ShaderLanguages → Unity ShaderLab(不是 “CG” 或 “HLSL”) - 若仍无高亮:检查是否误选了
Unity3D Shader Highlighter—— 该包已多年未维护,对 Unity 2021+ 的 SRP(URP/HDRP)关键字(如LightMode = "UniversalForward")完全不识别
为什么 C# 和 Shader 同时高亮后,补全/跳转仍不可用
高亮 ≠ 智能感知。Sublime Text 原生不解析语义,所有“跳转到定义”“参数提示”都依赖外部语言服务器(LSP)或插件桥接。
- C#:必须安装
OmniSharp插件 + 手动指定omnisharp.server_path(指向本地 OmniSharp-roslyn 或 .NET SDK 中的OmniSharp.exe),否则Ctrl+Click无效 - Shader:目前无成熟 LSP 支持 Unity ShaderLab;
ShaderLanguages仅提供语法高亮与基础 snippet,fmod、tex2D等 CG 函数不会被提示,也无法校验#pragma multi_compile拼写错误 - 关键限制:Unity 编辑器自身不暴露 AST 或符号表,第三方编辑器无法获得完整上下文,所谓“联调”实际只是并行编辑,非真联调
容易被忽略的路径与缓存问题
改完设置不生效?大概率是缓存没清或路径错配,尤其在多版本 Unity 共存时。
- Unity 项目中
Assets/Plugins下的.dll不影响 Sublime 高亮,但若你用 OmniSharp 解析 C#,它会读取项目根目录下的Assembly-CSharp.csproj—— 若该文件缺失或路径含中文/空格,OmniSharp 直接静默失败 - 修改
.sublime-syntax或.tmLanguage后,ST 不自动重载语法定义;必须重启 Sublime 或执行Tools → Command Palette → Reload Syntax - 如果用
.sublime-project设置了"syntax": "Packages/ShaderLanguages/Unity ShaderLab.sublime-syntax",但该路径不存在(比如插件重命名过),高亮会回退到 Plain Text,且无任何报错提示
真正卡住人的地方从来不是“怎么装”,而是“装完之后谁来告诉 Sublime 这个文件到底该用哪个语法解析”。Unity 的 .shader 和 C# 的 .asmdef 关联、SRP 的新 pragma、甚至自定义编译器宏,都会让语法判定失效——这时候得靠右下角手动点,而不是等自动识别。


















