Sublime Text 本身不提供 GraphQL 语法检测与补全,必须组合 LSP + LSP-graphql 插件,并手动配置 schema 路径和语法绑定;90% 失败源于 schemaPath 错误、LSP 未启动或文件类型未绑定,需依次安装 LSP 和 LSP-graphql、启用服务、配置 graphql.config.yml 中的 introspection schema.json 路径、重启 LSP 服务器,并将 .graphql 文件绑定至 GraphQL 语法。

Sublime Text 本身不提供 GraphQL 语法检测与补全,必须组合 LSP + LSP-graphql 插件,并手动配置 schema 路径和语法绑定——装完插件不等于能用,90% 的失败源于 schemaPath 错误或 LSP 未真正启动。
LSP-graphql 补全不工作?先确认 LSP 主框架和语言服务器都跑起来了
只装 LSP-graphql 没用,它依赖 LSP 主插件作为通信桥梁。如果状态栏右下角没显示 LSP-graphql(只显示 GraphQL 或压根没反应),说明服务根本没起来。
- 通过
Ctrl+Shift+P→ 输入Install Package,依次安装:LSP,再安装:LSP-graphql - 安装后重启 Sublime Text,否则插件不会初始化
- 打开命令面板,运行
LSP: Enable Language Server Globally,勾选graphql - 打开一个
.graphql文件,看状态栏左下角是否出现GraphQL LS: Ready;若卡在Starting…,大概率是 Node.js 版本低于16.14或graphql.config.yml路径写错
schemaPath 配错了,补全就静默失效——不是 bug,是设计如此
LSP-graphql 不会自动扫描项目、不读取环境变量、也不猜 schema 位置。路径写错、文件不可读、格式非法,它只会“假装正常”,不报错、不提示、不补全。
- 必须在项目根目录放
graphql.config.yml(或.graphqlrc),内容类似:
projects:
default:
schema: ./schema.json
-
schema.json必须是 introspection 导出结果(用get-graphql-schema或apollo schema:download生成),不能是 SDL 文本(如type Query { ... }) - 路径只支持相对或绝对,不支持
$HOME、~、通配符;./schema.json要确保文件真实存在且可读 - 改完配置后,必须手动执行
LSP: Restart Servers,否则新路径不生效
GraphQL 文件没高亮?不是插件问题,是文件类型没绑对
即使 LSP-graphql 正常,如果 .graphql 文件被识别为 Plain Text,语法高亮、补全、校验全部失效——这是 Sublime 默认行为,和插件无关。
- 安装插件
GraphQL(作者 princjef),不是GraphQL Language Service;后者只管 LSP,不管高亮 - 打开任意
.graphql文件,点击右下角状态栏的Plain Text→Open all with current extension as…→ 选GraphQL - 如果菜单里没有
GraphQL,说明插件没装成功,或没重启编辑器;可手动进入View → Syntax → Open all with current extension as…再试 - JS/TS 中写
gql`query { ... }`想高亮?打开Preferences → Package Settings → GraphQL → Settings,确认"enable_jsx_graphql": true
为什么 query 字段名敲错了也不报红?检查这三处
补全有、高亮有,但字段名拼错不标红,说明校验链断了——常见于 JS/TS 模板字符串中,或 schema 文件未被 language server 实际加载。
- 确保模板字符串前缀是全局已知函数名,如
gql、graphql;若写成const q = gql``,而gql是局部变量,LSP-graphql 无法识别上下文 - 检查
schema.json是否真被读取:打开LSP: Toggle Log Panel,搜索schema或error,看有没有路径 not found 或 parse failed 日志 - 补全触发有严格条件:光标必须在
{后面、且处于 query/fragment body 内;在字符串外、注释里、或variables:块里敲,都不会响应
最易被忽略的是:schema 更新后不重启 LSP 服务器,或误把 SDL 文件当 introspection JSON 用——这两点导致的问题几乎无法从 UI 上察觉,只能靠日志和状态栏确认实际加载状态。


















