sublime text无法配置smalltalk运行环境,仅支持语法高亮与外部pharo命令调用;需手动绑定.st后缀至smalltalk语法,并通过show scope name验证scope是否为keyword.control.smalltalk等,再配置pharo.sublime-build调用本地pharo.image执行脚本。

Sublime Text 不能配置 Smalltalk 运行环境,只支持语法高亮 + 外部脚本调用;你真正要做的只有两件事:让 .st 文件正确高亮,以及让 Ctrl+B 能把当前文件交给系统已安装的 pharo 命令执行。
如何确认 Smalltalk 语法高亮已生效
高亮不是“有颜色就行”,而是要能区分语言结构。有效状态下:Object subclass: #MyClass 中的 subclass: 应属 keyword.control.smalltalk,[:x | x + 1] 整体应是 meta.block.smalltalk,其中 : 和 | 各有独立 scope,#MyClass 是 constant.language.smalltalk,doSomething 是 entity.name.function.smalltalk。
验证方法:打开 .st 文件,把光标停在 ifTrue: 或 [:x|] 上,按 Ctrl+Shift+P 输入 Show Scope Name。若显示 text.plain,说明语法未绑定成功;若显示类似 keyword.control.smalltalk,才算到位。
- 字符串(单引号)、注释(双引号)、数字全无色 → 大概率是插件 YAML 语法定义损坏或未加载
- 关键字变色但块结构不识别(如
[:x|]整体没背景色)→ 可能meta.block.smalltalkscope 未被当前主题样式覆盖 - 装了插件但右下角菜单里没有
Smalltalk选项 → 检查Packages/下是否同时存在smalltalk和Smalltalk(大小写敏感),删掉多余的一个
为什么装了插件还是显示 Plain Text
这不是插件失效,而是 Sublime 没把 .st 后缀和语法包关联上。常见原因包括:
- 插件安装后没手动触发一次“默认绑定”:打开任意
.st文件 → 点右下角Plain Text→ 选Smalltalk→ 再点右下角 →Open all with current extension as…→ 选Smalltalk - 其他插件强制将所有未知后缀设为
text.plain(比如某些通用文本增强类插件) - 插件目录名冲突或未重启 Sublime:部分插件需重启才注册
.sublime-syntax文件 -
.cs文件也要单独绑定:Squeak/Cuis 用户常忽略这点,需对.cs文件重复上述两步操作
怎么配 Ctrl+B 执行 .st 脚本
这只是 shell 调用,不是交互式开发。前提是你已在终端中验证过 pharo --version 可返回版本号(如 Pharo 11.0.0),且镜像路径正确。
按 Ctrl+Shift+P → 输入 Build With → New Build System…,填入以下内容并保存为 Pharo.sublime-build(注意替换 pharo.image 为你的本地路径,例如 ~/pharo/Pharo11.image):
{
"cmd": ["pharo", "pharo.image", "eval", "--save", "$file"],
"selector": "source.smalltalk",
"working_dir": "$file_path"
}
- 构建后无输出或报
command not found→ 优先检查pharo是否在$PATH,而不是调试构建文件 -
"cmd"中的pharo.image必须是绝对路径或相对于working_dir的可访问路径;相对路径写错会导致No such file or directory - 无法
halt、无法inspect、无法热重定义 —— 这些能力依赖 Pharo IDE 的完整运行时状态,Sublime 不提供
容易被忽略的关键点
Smalltalk 在 Sublime 中不是“开发环境”,只是带高亮的文本编辑器。你无法实时 inspect 一个对象、无法 step-into 方法、无法查看实时对象图——因为 Sublime 不嵌入 VM、不加载 .image、也不维护活对象图。所有“运行”本质是调用外部 pharo CLI 执行脚本,和在终端里敲 pharo my.image eval --save '42 factorial' 完全等价。真正的交互式开发仍需 Pharo Launcher 或原生 IDE。











