sql语法高亮变灰主因是语言模式未切为sql或插件冲突;须先点击右下角切换为sql模式,再检查files.associations配置、禁用冲突格式化插件(如sql formatter与vscode-sql-formatter不共存),并确保language server启用。

SQL语法高亮突然变灰,大概率不是插件没装,而是某个格式化插件劫持了语言服务或覆盖了 token 规则。 VSCode 本身不提供 SQL 语义支持,所有高亮、补全、格式化都依赖扩展协作——一旦多个插件争抢同一入口(比如同时注册 sql 语言的 formatter 或 language server),轻则格式化失效,重则整个语法解析链静默降级为 Plain Text 模式。
右下角显示 Plain Text 就别调配置了
这是最硬的信号:VS Code 根本没加载任何 SQL 解析器。此时无论你装多少插件、改多少 settings.json,高亮都不会回来。
- 点击右下角状态栏的语言标识(哪怕它显示为空白或
Plain Text),输入sql并回车,强制切换为 SQL 模式 - 如果切换后仍不亮,检查
files.associations是否被误配,例如"*.sql": "plaintext"或"*.sql": "mysql"—— 后者会绕过基础高亮,除非你真装了对应 language server - 执行
code --disable-extensions启动 VSCode,确认高亮恢复。若恢复,100% 是插件冲突,不是设置问题
SQL Formatter 和 vscode-sql-formatter 别共存
这两个插件都注册 sql 语言的 formatter,但 provider ID 不同:sqlformatter vs vscode-sql-formatter。VSCode 只认一个默认 formatter,另一个会被静默忽略;更糟的是,部分版本会因注册冲突导致整个 sql 语言 tokenization 中断。
- 打开命令面板(
Ctrl+Shift+P),运行Developer: Show Running Extensions,看是否两个 SQL 格式化插件都在运行 - 禁用其中一个(推荐留
cdsama.sql-formatter,它对大小写和分号敏感度低,兼容性更好) - 在 SQL 语言专属设置中只保留一行:
"editor.defaultFormatter": "cdsama.sql-formatter",删掉任何形如"sql.format.provider"的冗余字段 - 重启 VSCode,再打开 .sql 文件观察右下角是否稳定显示
SQL而非闪退回Plain Text
格式化插件偷偷关掉了 language server
某些 SQL 插件(如早期版 mssql 或 SQLTools)会在启用 formatter 的同时,主动禁用自带的 language server,理由是“避免性能冲突”。结果就是 Ctrl+Space 补全表名失效、字段无提示、甚至关键字着色变弱——因为只剩 TextMate 基础语法,没了语义层。
- 打开 Output 面板 → 切换到
Log (Extension Host),搜索language server或activate,看是否有插件打印disabling language server due to formatter enabled类日志 - 若使用
SQLTools,进其设置搜sqltools.enableLanguageServer,确保值为true - 若用
mssql,检查是否启用了mssql.enableIntelliSense,该选项默认关闭,且与 formatter 无绑定关系 - 不要指望格式化插件顺带提供智能补全——补全靠 language server,格式化靠 formatter,它们是两套独立注册机制
真正难处理的不是哪个插件该留该删,而是有些插件(比如某些数据库客户端打包的 SQL 扩展)根本不暴露 language server 开关,也不响应 sql.* 配置项。这种情况下,要么换插件,要么接受“能格式化但无补全”的妥协状态——高亮本身只要语言模式正确、TextMate 规则没被覆盖,通常还能保住。











