Sublime Text 的 Haskell 功能完全依赖外部工具链,90% 配置失败源于 ghc、haskell-language-server 或 runhaskell 未正确加入 Sublime 的 PATH;必须确保终端能执行对应命令,并手动将路径注入 Sublime 环境变量,安装 Haskell IDE(非 SublimeHaskell)和 LSP 插件,配置 Haskell.sublime-build,项目根目录需含 .cabal 或 hie.yaml 文件,修改配置后须重启 HLS 服务。

Sublime Text 本身不运行 Haskell,所有“运行”“类型提示”“跳转定义”功能都依赖外部工具链是否就位、路径是否被正确继承、插件是否与当前 Sublime 版本兼容。配不成功,90% 是 ghc、haskell-language-server 或 runhaskell 没进 Sublime 的 PATH,不是插件装错了。
确认 ghc 和 haskell-language-server 真正在系统里且可调用
这是整个配置的地基。Sublime 不会帮你装 GHC,也不会自动找 HLS 路径——它只照着环境变量去执行命令。
- 终端里必须能跑通:
ghc --version、runhaskell --version、haskell-language-server --version;任一失败,Sublime 后续全白搭 - macOS/Linux 用户特别注意:Sublime(尤其从 Dock 启动)默认不读 shell 的
PATH,which ghc输出的路径(比如/Users/you/.ghcup/bin/ghc)得手动塞进 Sublime 的环境变量里 - Windows 用户检查系统 PATH 是否含
C:\Users\XXX\AppData\Roaming\ghcup\bin,并确保没用“以管理员身份运行”启动 Sublime(会导致环境隔离) - 验证方式:在 Sublime 控制台(
Ctrl+`)里输入import os; print(os.environ.get('PATH')),看输出里有没有你which ghc的目录
用 Package Control 装 Haskell IDE,别碰 SublimeHaskell 或 ghc-mod
Sublime Text 4 已彻底移除 Python 2 支持,而 SublimeHaskell 和 ghc-mod 都严重依赖它,装了也静默失效——类型不显示、hover 空白、跳转到 GHC 源码里去。
- 必须装的是
Haskell IDE(作者 fpco 或 haskell),它基于 LSP 协议对接haskell-language-server,是目前唯一稳定支持 ST4 的方案 - 顺带装
LSP插件(不是LSP-haskell,那个已废弃),它是语言服务器通信的底层桥梁 - 装完重启 Sublime——HLS 进程在启动时就绑定项目路径,不重启等于没配
- 打开
.hs文件后,右下角状态栏应出现 “Haskell: Ready”,否则说明 HLS 没起来,回头查 PATH 或项目配置
写对 Haskell.sublime-build 才能让 Ctrl+B 真正跑起来
默认 Build System 对 Haskell 是空的,不自定义就永远只能看语法高亮。但写错一行 JSON 就会报 command not found 或卡住不动。
- 保存为
Packages/User/Haskell.sublime-build(不要放错目录) - 推荐用
runhaskell而非ghc:"cmd": ["runhaskell", "$file"]——适合单文件快速测试,不生成中间文件 - 必须加
"file_regex": "^(*?):([0-9]+):([0-9]+):? ?(.*)$",否则错误行点不了,跳不到问题位置 - Windows 用户注意:
runhaskell.bat要带.bat后缀,路径含空格时用"shell_cmd": "runhaskell \"$file\""更稳 - 如果文件里有
getLine或需要交互输入,Ctrl+B一定没反应——这不是 bug,是 Sublime build 系统不支持 stdin 阻塞,这种场景请切回终端跑
项目根目录缺 .cabal 或 hie.yaml,HLS 就静默降级
HLS 不是全局服务,它按项目启动。没有项目描述文件,它连模块依赖都解析不了,补全、跳转、类型推导全失效,而且不报错——只安静地当个哑巴。
- 最简要求:项目根目录必须有
your-project.cabal或package.yaml;没有就建一个最简版:name: myproj\nversion: 0.1.0\nbuild-type: Simple\nexecutable: myproj\n main-is: Main.hs - 想开完整类型提示(比如显示
forall a. Eq a => a -> a而不是简化版),得在项目根建hls.yaml,内容为:{"plugins": {"ghcide": {"typecheck": {"showFullTypes": true}}}} - 用 Stack 管理项目?在
.lsp-config.json里指定"command": ["haskell-language-server", "--stack"],否则 HLS 可能错用 Cabal 的 GHC - 改完任何配置,必须
Ctrl+Shift+P → Haskell: Restart Server,不能只 reload project
最常被忽略的其实是项目路径和 HLS 启动时机:Sublime 启动时就初始化 HLS,之后再往目录里加 .cabal 文件,它不会自动重载——必须重启编辑器或手动重启 HLS 服务。

















