VSCode不执行Scheme代码,因依赖Chez Scheme解释器与Code Runner插件桥接;CMD能运行scheme仅说明PATH配置正确,而Code Runner作为独立进程不继承终端环境,需手动将ta6nt/i3nt所在完整目录加入系统Path,并配置".scm"映射及"$fullFileName"参数,否则报spawn scheme ENOENT。

VSCode 本身不执行 Scheme 代码,必须靠 Chez Scheme 解释器 + Code Runner 插件桥接;scheme 命令在终端能运行,不代表 VSCode 能调用它——路径、扩展名、参数三者错一个就静默失败或报 spawn scheme ENOENT。
为什么 scheme 在 CMD 能跑,但 VSCode 点运行却报错?
根本原因是 VSCode 的 Code Runner 默认不读系统 PATH(尤其 Windows),也不自动继承终端环境。你手动在 CMD 输入 scheme --version 成功,只说明解释器装对了、PATH 加对了;但 Code Runner 启动时是独立进程,它找不到 scheme 就会直接失败。
- Windows 下必须把
ta6nt或i3nt所在完整目录(例如C:\Program Files\Chez Scheme 10.0.0\bin\ta6nt)加进系统环境变量Path,不是只加C:\Program Files\Chez Scheme 10.0.0\bin - 验证方式:重启 VSCode 后,在集成终端里执行
where scheme,应返回可执行文件路径;若返回空,说明 PATH 没生效 - 别信“装完就自动识别”——Code Runner 从不自动探测解释器位置,全靠你配
"scheme": "scheme"这条映射
code-runner.executorMapByFileExtension 该填 .scm 还是 .ss?
Chez Scheme 默认只识别 .scm 为脚本文件;.ss 是传统 MIT/GNU Scheme 用的扩展名,Chez 遇到 .ss 文件会尝试以交互模式加载,导致 (exit) 不生效、REPL 卡住、中文输出乱码。
- 务必统一用
.scm后缀保存文件 - 配置项必须写成:
"code-runner.executorMapByFileExtension": {".scm": "scheme --script $fullFileName"} - 别写
"--script $fileName":$fileName不含路径,跨目录运行时会找不到文件;$fullFileName才带绝对路径,安全 - 如果硬要用
.ss,得改 Chez 启动参数加-f强制脚本模式,但没必要——换后缀更省事
中文输出乱码、(display "你好") 显示问号怎么办?
这不是 VSCode 编码设置问题,而是 Windows 终端默认用 GBK,而 Chez Scheme 输出 UTF-8 字节流,两者不匹配。Code Runner 默认在集成终端运行,终端解码失败就显示乱码。
- 最稳解法:在 Code Runner 配置里强制走外部终端,并设其编码为 UTF-8:
"code-runner.runInTerminal": true - Windows 10/11 还需开启系统级 UTF-8 支持:控制面板 → 区域 → 管理 → 更改系统区域设置 → 勾选“Beta 版:使用 Unicode UTF-8 提供全球语言支持”
- 别依赖
"files.encoding": "utf8"—— 这只影响文件读写,不影响解释器 stdout 输出解码 - 如果仍乱码,临时补救:在
.scm文件开头加(define (display-utf8 s) (display s) (newline)),但治标不治本
为什么装了 vscode-scheme 却没反应?
它只提供语法高亮和括号匹配,不连解释器、不启动 REPL、不绑定快捷键——Ctrl+Alt+N 调用的是 Code Runner,不是它。这个插件自 2021 年起停止维护,连 .scm 关联都可能失效。
- 删掉
vscode-scheme完全不影响运行能力,留着反而可能干扰语言模式识别 - 真正需要的是:Chez Scheme + Code Runner + 正确 JSON 配置,三者缺一不可
- 如果想用 REPL 交互式开发,得手动开终端输
scheme,VSCode 没有成熟 Scheme REPL 扩展(Calva 不支持 Scheme,vscode-racket只认 Racket)
最易被忽略的点:Windows 路径含空格(如 C:\Program Files)时,scheme --script $fullFileName 会被 shell 当作多个参数切分,导致文件路径截断。解决方案只有两个:重装 Chez 到无空格路径(如 C:\chez\bin\ta6nt),或改用 tasks.json 自定义 task 并用引号包裹路径——但多数人卡在第一步就放弃了。











