根本原因是Sublime Text的build系统未找到ghc或runhaskell;需确认其在PATH中,并为Sublime单独配置env PATH,再按项目复杂度选择runhaskell、stack exec或cabal run构建方式。

Sublime Text 装完 Haskell 插件为啥 Ctrl+B 没反应
根本原因通常是 sublime-build 系统没找到 ghc 或 runhaskell。Sublime 不自带 Haskell 运行时,它只负责调用系统命令——如果终端里输 ghc --version 报错,Sublime 也一样失败。
实操建议:
- 先在终端确认
ghc和runhaskell在$PATH里:运行which ghc,看输出是不是类似/usr/local/bin/ghc或/opt/ghc/bin/ghc - 如果用
ghcup安装的,记得执行过ghcup install ghc和ghcup set ghc <version>,否则ghc命令不生效 - macOS 上通过 Homebrew 安装后,可能需要把
/opt/homebrew/bin(Apple Silicon)或/usr/local/bin(Intel)加进 Sublime 的环境变量路径,方法见下一条
怎么让 Sublime 找到 ghc(Mac/Linux/Windows 路径差异)
Sublime 启动时读取的是它自己的环境变量,不一定和你的 shell 一致。比如 iTerm 里 ghc 正常,但 Sublime 从 Dock 启动就找不到。
实操建议:
- macOS:编辑
~/Library/Application Support/Sublime Text/Packages/User/Preferences.sublime-settings,加一行:"env": {"PATH": "/opt/homebrew/bin:/usr/local/bin:$PATH"}(根据which ghc输出调整) - Linux:同理,在
~/.config/sublime-text/Packages/User/Preferences.sublime-settings中设置env - Windows:确保
ghc所在目录(如C:\Users\XXX\AppData\Roaming\local\bin)已加入系统PATH,且 Sublime 是正常方式启动(不是右键“以管理员身份运行”导致环境隔离)
用哪个 Build System:直接 runhaskell 还是 ghc -e?
简单脚本用 runhaskell 最省事;但遇到模块导入、多文件项目,它会失败——runhaskell 不处理依赖解析,也不支持 .cabal 或 stack 配置。
实操建议:
- 单文件快速测试:建一个
Haskell.sublime-build,内容为:{ "cmd": ["runhaskell", "$file"], "selector": "source.haskell", "file_regex": "^(...*?):([0-9]+):([0-9]+):? ?(.*)$" } - 带模块或需要
base以外依赖:必须用stack exec -- runhaskell $file或cabal run,对应 build 文件里改cmd字段 - 注意
file_regex:Haskell 错误格式是Foo.hs:12:5: error:,正则必须匹配这个结构,否则跳转不到错误行
为什么保存后自动 build 失败,但手动 Ctrl+B 又成功
这是 Sublime 的构建触发时机问题。默认 “Save and Build” 插件或自定义保存钩子,可能在文件还没完全写入磁盘时就调用了 runhaskell,导致读到空文件或截断内容。
实操建议:
- 别依赖自动 build,尤其写
.hs时容易因语法高亮插件或格式化工具造成瞬时写入冲突 - 如果非要自动,用
sublime-plugin如AutoBuild,并设延迟 200ms 再执行,避免 race condition - 检查是否有其他插件(如
Haskell IDE或SublimeHaskell)在后台偷偷调用ghc-mod或hie,它们和 build system 共用ghc可能抢锁或污染环境变量
最常被忽略的一点:Sublime 的 Haskell 构建本质是 shell 命令转发,它不理解 Cabal 项目结构、不加载 stack.yaml、也不做依赖隔离。你得自己决定该用 runhaskell、stack exec 还是 cabal repl —— 工具链选错,配置再对也没用。










