sublime text 默认不支持 c# 语法高亮,需安装社区维护的 c# improved 包并手动配置语法作用域以识别 c# 6+ 及更新特性,同时禁用 omnisharp 的语法高亮功能以避免冲突。

Sublime Text 默认不带 C# 语法高亮,必须手动安装语法包;原生支持仅限基础文本识别,class、using、async 等关键字不会着色,也不识别 var 或泛型语法。
安装 C# 语法包(非官方但最稳定)
Sublime Text 官方仓库(Package Control)中没有维护良好的 C# 语法包,C# 自带的语法定义(Packages/C#/C#.tmLanguage)早已过时,无法识别 C# 6+ 特性(如字符串插值、nameof、空合并运算符 ??)。推荐使用社区维护的 OmniSharp 配套语法或独立更新的 C# Improved:
- 打开命令面板:
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS) - 输入
Install Package,回车后等待列表加载完成 - 搜索
C# Improved(作者:abusalimov),选中安装 - 安装完成后,打开任意
.cs文件,右下角点击语法选择 →C# Improved
注意:该包不依赖 OmniSharp 或 .NET SDK,纯语法着色,兼容 ST3/ST4;若误选 C#(默认项),record、init、required 等新关键字仍为白色。
手动设置语法作用域以支持现代 C# 特性
即使装了 C# Improved,某些语法结构(如 global using、primary constructor)仍可能未被识别——这是语法定义文件(.sublime-syntax)未覆盖所致。可临时补丁:
- 菜单 →
Preferences→Browse Packages…→ 进入C# Improved文件夹 - 编辑
C# Improved.sublime-syntax,在contexts下添加如下片段(放在main规则末尾):
- match: '\b(global\s+)?using\b'
scope: keyword.control.import.csharp
- match: '\b(record|init|required)\b'
scope: storage.modifier.csharp
保存后重启 Sublime 或执行 Ctrl+Shift+P → Reload Syntax Definitions。否则 global using System; 会被当作文本,record Person(string Name); 中的 record 不高亮。
避免与 OmniSharp 插件冲突导致高亮失效
如果同时安装了 OmniSharp(用于代码补全/跳转),它会接管语法高亮逻辑,但其内置语法器常与 C# Improved 冲突,表现为:关键字突然变灰、async 不着色、括号配对失效。
- 检查是否启用 OmniSharp 的语法支持:打开
Preferences → Package Settings → OmniSharp → Settings – User - 确认配置中含
"syntax_highlighting": false(推荐设为false) - 若已开启,且高亮异常,直接删掉
"syntax_highlighting"行,OmniSharp 将退回到只提供语义功能,交由C# Improved负责着色
OmniSharp 的语法模块基于旧版 Roslyn,对 C# 12 支持滞后,强行启用反而破坏已有高亮效果。
验证高亮是否真正生效
别只看 class 和 public 是否变色——这些老关键字几乎所有语法包都支持。真正检验点是:
- 打开新文件,输入
var x = new List<int> { 1, 2 };</int>:检查var(应为 keyword)、List<int></int>(应为 support.class)、{}(应为 punctuation.section.braces) - 输入
string? name = null;:?应为 punctuation.separator.nullable - 输入
nameof(x):nameof应为 keyword.other.nameof
若任一不符合,说明语法包未正确加载或作用域规则缺失——此时不要重装插件,优先检查当前文件右下角是否真为 C# Improved,而非显示 C# 或 Plain Text。










