Sublime Text 运行 .scm 文件需手动配置 Build System 并指定本地 Scheme 解释器的绝对路径,确认解释器已安装且可命令行调用,避免中文路径、空格及编码问题,优先用 (display "ok") 测试通路。

Sublime Text 本身不内置 Scheme 解释器,运行 .scm 文件必须手动配置 Build System 并指向你本地已安装的 Scheme 实现(如 chezscheme、guile、chicken-csi 或 racket)。配错路径或参数,Ctrl+B 会直接报错“Unable to find command”或卡在空白输出。
确认已安装 Scheme 解释器并能命令行调用
这是前提,Sublime Text 只是调用它,不是自带它。
- 打开终端(Windows 用 CMD/PowerShell,macOS/Linux 用 Terminal),输入
chezscheme --version、guile --version或racket -v,看是否返回版本号;如果提示“command not found”,说明没装好或没加进PATH - Windows 用户尤其注意:
chezscheme.exe默认不加到系统环境变量,需手动把安装目录(如C:Program FilesChez Schemein)加进PATH - macOS 用 Homebrew 安装的
guile通常在/opt/homebrew/bin/guile,但终端能运行不代表Sublime Text能——因为 GUI 应用可能不继承 shell 的PATH,所以后续仍建议用绝对路径
新建 Build System 并填对解释器绝对路径
不能只写 guile 或 racket,得写完整路径,否则 Windows 和 macOS 都容易失败。
- 菜单栏选择
Tools → Build System → New Build System… - 替换全部内容为(以
racket为例):{ "cmd": ["/usr/local/bin/racket", "-f", "$file"], "selector": "source.scheme", "file_regex": "^(...*?):([0-9]+):([0-9]+):.*$", "encoding": "UTF-8" } -
"cmd"中第一个元素必须是解释器的绝对路径:
• macOS:用which racket查,常见为/usr/local/bin/racket或/opt/homebrew/bin/racket
• Linux:同上,which guile或which chezscheme
• Windows:写成"C:\Program Files\Racket\racket.exe"(双反斜杠)或"C:/Program Files/Racket/racket.exe"(正斜杠更稳妥) -
"selector": "source.scheme"表示该构建系统自动匹配后缀为.scm或.ss的文件(需确保文件已正确识别语法高亮;若没识别,右下角点语法名 →Open all with current extension as… → Scheme)
处理标准输入/输出与交互式行为
默认 Ctrl+B 是单次执行,不支持交互式 REPL。如果想边写边试,得另配或改用终端。
-
racket -f $file是“执行脚本”,适合带(display "...")的程序;若用了(read)等等待输入的函数,构建系统会卡住——因为它不提供交互式 stdin - 想临时调试,可改成:
"cmd": ["/usr/local/bin/racket", "-i", "-f", "$file"],其中-i启动交互模式,但输出会混着提示符,且Ctrl+B无法中途输入,仅适合简单测试 - 真正需要交互,推荐:保存文件后,在终端手动运行
racket your-file.scm;或用插件Terminus在 Sublime 内嵌终端中操作 - Guile 用户注意:
guile默认不读取文件后退出,要用guile -s $file;chezscheme则用chezscheme --script $file
中文路径和编码问题会直接导致失败
哪怕解释器路径完全正确,只要文件路径含中文或空格,Ctrl+B 就可能静默失败或报错“cannot open input file”。
- 把 Scheme 源文件放在纯英文路径下,例如
D:/code/scheme/hello.scm,不要放在“桌面”“文档”或含“编程”“测试”等中文名的文件夹里 - 确保文件本身编码是
UTF-8(菜单File → Save with Encoding → UTF-8),特别是含中文字符串时;racket和guile默认支持,但chezscheme对非 ASCII 字符更敏感 - Build System 中显式加上
"encoding": "UTF-8",避免 Windows 下 cmd 输出乱码
(display "ok") 测试通路是否跑通——路径、编码、空格,三者任一出错,Ctrl+B 就不会给你任何有效反馈。


















