Sublime Text 本身不运行 Haskell,90% 的“运行失败”或“跳转失效”源于 PATH 未被继承,需手动将 stack、haskell-language-server 等路径注入 Sublime 环境变量,安装 LSP 和 Haskell IDE 插件(禁用 SublimeHaskell),配置 Stack.sublime-build 并确保项目含 stack.yaml 或 cabal.project,修改后须完全重启 Sublime 并执行 LSP: Restart Servers。

Sublime Text 本身不运行 Haskell,Stack 项目必须由 stack 命令驱动;90% 的“运行失败”或“跳转失效”问题,根源是 Sublime 没继承你终端里有效的 PATH,导致找不到 stack、haskell-language-server 或 GHC,而不是插件装错了。
确认 stack 和 haskell-language-server 真正在系统 PATH 中
这是所有功能的前提。Sublime 不会自动读取你的 shell 配置(尤其 macOS 从 Dock 启动、Windows 右键“以管理员身份运行”时),它只认自己启动时加载的环境变量。
- 在终端执行:
which stack、which haskell-language-server、stack --version、haskell-language-server --version—— 四个命令都必须有输出 - macOS:若
which stack输出类似/Users/you/.local/bin/stack,需把/Users/you/.local/bin加入 Sublime 的env.PATH - Linux:常见路径是
~/.local/bin或~/.cabal/bin;用echo $PATH对照确认 - Windows:检查系统环境变量 PATH 是否含
%USERPROFILE%\AppData\Roaming\local\bin(stack install 默认路径)或%USERPROFILE%\AppData\Roaming\ghcup\bin - 验证 Sublime 是否继承成功:按
Ctrl+`打开控制台,输入import os; print(os.environ.get('PATH')),看输出里有没有你which出来的目录
安装 LSP + Haskell IDE 插件,禁用 SublimeHaskell
Sublime Text 4 已彻底移除 Python 2 支持,而 SublimeHaskell 和 ghc-mod 严重依赖它,装了也静默失效:hover 空白、跳转进 GHC 源码、类型提示不显示。
- 用 Package Control 安装两个插件:
LSP(语言服务器通信底层)和Haskell IDE(作者fpco或haskell,基于 LSP 协议对接haskell-language-server) - 不要安装
SublimeHaskell、LSP-haskell(已废弃)、ghc-mod—— 它们与当前工具链不兼容 - 装完后必须完全重启 Sublime(不是 Reload Project),因为
haskell-language-server进程在启动时就绑定项目路径和环境 - 打开一个
.hs文件,右下角状态栏应显示Haskell: Ready;若卡在Starting...,说明 HLS 启动失败,先回头查 PATH 和版本匹配
为 Stack 项目配置 .sublime-build 并设对 working_dir
runhaskell 对 Stack 多模块项目无效,必须调用 stack exec 或 stack run。构建系统写错一行 JSON 就会报 [Errno 2] No such file or directory 或静默无输出。
- 新建文件
Packages/User/StackRun.sublime-build,内容如下:
{
"cmd": ["stack", "run"],
"file_regex": "^(*?):([0-9]+):([0-9]+):? ?(.*)$",
"selector": "source.haskell",
"working_dir": "$project_path"
}
-
"cmd": ["stack", "run"]适用于含executable段的package.yaml或.cabal项目;若只有库没可执行项,改用["stack", "exec", "--", "ghci", "$file"] -
"working_dir": "$project_path"是关键:确保stack在项目根目录执行,否则找不到stack.yaml或cabal.project -
"file_regex"必须匹配 Stack 错误格式,如src/Main.hs:12:5: error:;正则中^(*?):([0-9]+):([0-9]+)让点击错误能跳转到对应行 - 保存后按
Ctrl+Shift+P→Build System→ 选StackRun,再按Ctrl+B即可触发
项目根目录必须有 stack.yaml 或 cabal.project,且 HLS 需识别 cradle
没有项目配置文件,haskell-language-server 会静默降级为“单文件模式”,不索引依赖、不解析跨模块引用、hover 只显示基础类型,且不会报任何错误日志。
- Stack 项目至少要有
stack.yaml(哪怕空文件);多包工作区还需cabal.project - 确保
stack.yaml中 resolver 匹配你本地 GHC 版本,例如resolver: lts-22.26(对应 GHC 9.4.8);错配会导致 HLS 启动失败 - 如果用
hie.yaml(非必需,但更可控),内容应类似:
cradle:
stack:
- path: "./"
component: "my-project:lib"
- 修改
stack.yaml或hie.yaml后,必须执行Ctrl+Shift+P→LSP: Restart Servers(仅重启 Sublime 不生效) - 若 Ctrl+Click 跳转仍指向 GHC 源码,检查
stack.yaml的packages:是否包含当前模块所在路径,且build-depends列全了 import 的包
最易被忽略的是:Sublime 启动方式决定 PATH 继承结果,而 HLS 进程一旦启动就绑定项目路径和环境变量——改完配置不重启 Sublime 或不重启 LSP Server,等于没改。


















