Sublime Text 不内置 Smalltalk 或 Racket 语法支持,需安装第三方语法包(如 Smalltalk Sublime、Racket Syntax)并手动绑定 .st/.rkt 后缀;混编场景下高亮失效主因是语法不支持嵌套 scope,须用 Inspect Scope 确认实际 scope 并匹配主题配色规则。

Sublime Text 本身不内置 Smalltalk 或 Racket 语法支持,必须靠第三方语法包实现高亮;混编场景下(比如 Racket 中嵌入 JavaScript 字符串、Smalltalk 中写 Shell 片段),不能只靠后缀绑定,得用 Inspect Scope 确认实际 scope 是否被主题覆盖,否则高亮会“断层”或全白。
怎么让 .st 或 .rkt 文件正确高亮
Sublime 不识别 .st 和 .rkt 是默认行为,不是配置错误。它只靠扩展名查注册表,而这两个后缀没被原生语法包收录。
- 装语法包:用
Ctrl+Shift+P→Package Control: Install Package,搜Smalltalk(推荐Smalltalk Sublime)或Racket(推荐Racket Syntax) - 装完立刻生效,但已打开的
.st/.rkt文件不会自动刷新语法,需手动Set Syntax:或重新打开 - 验证是否加载成功:右下角点语言名,菜单里应出现
Smalltalk或Racket;若没有,检查Preferences → Package Control → Disable Package里是否误禁用了它 - 绑定后缀:先手动切对语法,再执行
View → Syntax → Open all with current extension as…,选中对应语言,Sublime 会在用户设置里加类似"*.st": "Smalltalk"的映射
混编时高亮失效的真正原因
比如 Racket 的 #lang racket/base 文件里写了 (js-string "console.log(1)"),或 Smalltalk 的字符串里拼了 JSON —— 这些内容不会自动触发 JS/JSON 高亮,因为 Sublime 的语法解析是单层的,不递归进入字符串体。
Dingtalk CLI SKILL / 钉钉 dingding / dingtalk dws skill — 管理钉钉(DingTalk)产品(AI 表单、日历、联系人、机器人、待办事项、审批、考勤、报表等)
- 原生语法包几乎都不做嵌套 scope 推导,
source.racket下的字符串仍是string.quoted.double.racket,不是source.js.embedded.racket - 想让字符串内也高亮,得用支持嵌入式语法的插件(如
ApplySyntax),并配合自定义规则,例如匹配js-string关键字后启用 JS 语法子解析 - 更轻量的办法:用
Ctrl+Shift+P→Inspect Scope看光标处实际 scope 链;如果显示string.quoted.double.racket而不是source.js,就说明没嵌套,别指望主题能渲染 JS 关键字色 - 常见错觉:“我装了 JavaScript 插件,为什么 Racket 里的 JS 字符串还是白的?”—— 因为语法包没声明嵌入能力,scope 根本没变
配色方案不显示 Smalltalk/Racket 颜色怎么办
装了语法包但代码全是灰白色,大概率是当前 .sublime-color-scheme 没定义对应 scope 的颜色规则,而非语法包失效。
- Smalltalk 常用 scope:
keyword.control.smalltalk、support.function.smalltalk、comment.line.doubleDash.smalltalk - Racket 常用 scope:
keyword.control.racket、constant.language.racket、string.quoted.double.racket - 检查方法:用
Inspect Scope复制出 scope 名,去当前主题文件(Packages/Color Scheme - Default/Monokai.sublime-color-scheme)里搜,看有没有匹配的scope条目 - 补规则最简方式:在主题文件的
rules数组末尾加一条,例如:{"scope": "keyword.control.smalltalk", "foreground": "#FF6B6B"} - 注意:
sublime-color-scheme是 JSON 格式,加完要校验语法;改完需重启 Sublime 才生效
真正容易被忽略的是:Smalltalk 和 Racket 的语法包大多由社区维护,更新滞后,部分新版语法特性(如 Racket 的 #lang scribble 或 Smalltalk 的 Pharo 11 新关键字)可能还没覆盖到 scope 定义里——这时 Inspect Scope 返回的 scope 名会和文档不一致,得先确认你用的语法包版本是否支持目标语言版本。

















