GLSL文件在Sublime Text中显示为Plain Text是因后缀未绑定语法,需手动将.frag/.vert等扩展名关联至GLSL语法;Three.js注入变量如vUv无法被插件补全,属运行时动态行为;"highlight_line": true生效需配色方案含lineHighlight规则。

GLSL 文件在 Sublime Text 里还是白的?不是插件没装好,是后缀根本没绑定语法 —— 这是最常卡住人的第一步。
右下角显示 Plain Text 就说明 GLSL 高亮完全没生效
Sublime 不会自动把 .frag、.vert、.glsl 等后缀关联到 GLSL 语法。装完插件只是加了能力,不手动绑定,文件就永远是 Plain Text。
- 打开一个
.frag文件,看右下角显示的是不是Plain Text或误判成ShellScript(尤其.s后缀容易被抢注) - 立刻点击右下角语言名 → 选
Open all with current extension as…→ 找到名称含GLSL的项(不是OpenGL Shading Language这种旧名,以你安装后实际列出为准) - 如果菜单里压根没有
GLSL:按Ctrl+Shift+P输入Package Control: List Packages,搜GLSL确认是否真已安装成功 -
.fs、.vs、.geom等扩展名也得单独绑定,不能只绑.frag - 绑定后新建同后缀文件会自动匹配,但已打开的旧文件需手动点右下角重新选一次语法
Three.js 的 vUv、cameraPosition 在 GLSL 里不补全?这不是 bug,是设计如此
GLSL 插件只遵循 OpenGL 官方规范。vUv、vNormal、cameraPosition 是 Three.js 在运行时注入的变量,不属于 GLSL 语言本身。任何标准 GLSL 插件都不会为它们提供补全或高亮。
- 别指望靠插件“修复”这个 —— 补全是静态分析,而这些变量是动态注入的
- 可行替代方案:用 Sublime 的
snippets功能自建常用变量片段,例如新建vUv.sublime-snippet,内容为<content>vUv</content><tabtrigger>vuv</tabtrigger>,保存到Packages/User/目录下 - 顶部加伪注释如
// @fragment: cameraPosition能骗部分解析器识别 scope,但可能干扰真实编译,慎用 - 更可靠的做法:放弃编辑器补全,改用
SpectorJS在浏览器中实时 inspect 着色器输入变量,它看到的才是运行时真实上下文
"highlight_line": true 开了但当前行没颜色?配色方案缺 lineHighlight 规则
启用 "highlight_line": true 只是打开开关,真正决定颜色的是你当前 .sublime-color-scheme 文件里有没有 lineHighlight 这条规则。很多主题(尤其是轻量级或自定义主题)根本没定义它。
- 验证方法:打开任意代码文件,按
Ctrl+Shift+P输入Developer: Show Scope Name,把光标放在某一行中间,看输出里有没有region.line—— 没有就说明主题缺失该规则 - 解决方式:用
PackageResourceViewer: Open Resource打开当前主题文件,在"rules"数组末尾插入一条{"scope": "region.line", "background": "#2a2d34"}(颜色值按需调整) - 注意逗号分隔,JSON 格式必须合法;改完保存即生效,无需重启
最易忽略的其实是三件事:后缀绑定必须逐个做、Three.js 注入变量无法靠语法插件补全、高亮行颜色依赖配色方案而非设置开关。这三个点没理清,再装十个插件也没用。


















