glsl插件需手动绑定.frag等后缀才能生效,vuv等three.js变量无原生补全,highlight_line高亮依赖配色方案定义linehighlight规则,外置着色器不生效多因浏览器缓存或加载时机不当。

GLSL插件装了但.frag文件还是白的?检查右下角语法标识
Sublime 不会自动把 .frag、.vert 或 .glsl 文件关联到 GLSL 语法,装完插件只是加了高亮能力,没绑定后缀就等于没用。打开一个 .frag 文件,看右下角显示的是不是 Plain Text 或 ShellScript(.s 常被误判)——如果是,说明语法没生效。
立刻点击右下角语言名 → 选 Open all with current extension as… → 找到 GLSL(不是 OpenGL Shading Language 或其他变体,名称以插件安装后实际显示为准)。部分旧版插件可能叫 OpenGL Shading Language (GLSL),认准带 GLSL 字样的那一项。
- 如果菜单里根本没出现 GLSL 选项,先确认插件是否真装成功:按
Ctrl+Shift+P输入Package Control: List Packages,搜GLSL看有没有列出 -
.fs、.vs、.geom等扩展名也要单独绑定,不能只绑.frag - 绑定后新建同后缀文件会自动匹配,但已打开的旧文件需手动点右下角重新选一次语法
Three.js着色器里vUv、cameraPosition不补全?别指望插件原生支持
GLSL 插件只管 OpenGL 标准语法,vUv、vNormal、cameraPosition 这些是 Three.js 在运行时注入的变量,不属于 GLSL 规范,所以任何标准 GLSL 插件都不会为它们提供补全或高亮。
想获得这类变量提示,得靠人工干预:
- 用
Sublime Text的snippets功能自建常用变量片段:比如新建vUv.sublime-snippet,内容为<content></content><tabtrigger>vuv</tabtrigger>]]>,保存到Packages/User/目录下 - 在
.frag或.vert文件顶部加伪注释行,骗过语法解析器识别 scope(不推荐,容易干扰编译):// @vertex: vUv, vNormal; @fragment: cameraPosition, diffuseColor - 放弃补全幻想,改用
SpectorJS在浏览器里实时 inspect 着色器输入变量,比编辑器补全更可靠
改了highlight_line但当前行没颜色?配色方案缺lineHighlight定义
启用 "highlight_line": true 只是打开开关,真正决定颜色的是你当前配色方案(.sublime-color-scheme)里有没有 lineHighlight 这条规则。很多主题(尤其是轻量级或自定义主题)压根没定义它,结果就是“开了等于没开”。
验证方法:打开任意代码文件,按 Ctrl+Shift+P 输入 Developer: Show Scope Name,把光标放在某一行中间,看输出里有没有 region.line —— 没有就说明主题缺失该规则。
- 快速修复:用
PackageResourceViewer打开当前主题文件,在"rules"数组末尾加一项:{"name": "Current Line", "scope": "region.line", "background": "hsla(200, 5%, 90%, 0.3)"} - 别改
Preferences.sublime-settings里的颜色值,那地方只认布尔开关,写foreground或background都无效 - 换主题测试最快:临时切到
Monokai或Adaptive,如果高亮出现了,就坐实是原主题的问题
外置着色器文件改了不生效?Three.js缓存和加载时机是关键
用 THREE.FileLoader 加载外置 .vert/.frag 是推荐做法,但开发时经常遇到“改了文件,页面没变化”的情况,问题不在 Sublime,而在 Three.js 的资源加载链路。
常见卡点:
- 浏览器缓存了旧的着色器文件:给
FileLoader.load()的 URL 后加时间戳参数,比如shader.vert?t=1715536380,或禁用 Chrome DevTools 的Disable cache选项 -
onBeforeCompile被调用太早:如果你在材质创建后才改material.onBeforeCompile,而材质早已被 renderer 编译过,新钩子不会触发;必须在new THREE.MeshStandardMaterial(...)之后、首次渲染前设置 - 文件路径错误导致加载失败:检查控制台是否有
Failed to load resource报错,确认路径相对于 HTML 文件位置,不是相对于 JS 文件
真正难调试的点在于:GLSL 语法错误不会在 Sublime 里报错,也不会在控制台直接抛异常,而是让材质变成纯黑或透明——得靠 SpectorJS 抓帧看 shader 编译日志,或者把着色器内联进 JS 用字符串拼接方式临时验证逻辑。











