sublime text 本身不运行 haskell,所有功能依赖外部工具链;90% 配置失败源于 ghc、haskell-language-server 或 runhaskell 未正确加入 sublime 的 path,需手动注入路径、安装 haskell ide 和 lsp 插件、确保项目含 .cabal 或 package.yaml,并完全重启编辑器。

Sublime Text 本身不运行 Haskell,所谓“语法提示”全靠外部工具链是否就位、路径是否被正确继承、插件是否与 ST4 兼容——配不成功,90% 是 ghc、haskell-language-server 或 runhaskell 没进 Sublime 的 PATH,不是插件装错了。
终端能跑通但 Sublime 报 command not found?查 PATH 继承
Sublime(尤其 macOS 从 Dock 启动、Windows 右键“以管理员身份运行”)默认不读 shell 的 PATH。它启动时用的是系统级环境变量,不是你终端里那个。
- 先在终端运行
which ghc、which haskell-language-server,记下完整路径(比如/Users/you/.ghcup/bin/ghc) - macOS:编辑
Packages/User/Preferences.sublime-settings,加一行:"env": {"PATH": "/Users/you/.ghcup/bin:/opt/homebrew/bin:$PATH"} - Windows:确认系统
PATH包含C:\Users\You\AppData\Roaming\ghcup\bin,且 Sublime **没**以管理员身份启动 - 验证方式:重启 Sublime,按
Ctrl+`打开控制台,输入import os; print(os.environ.get('PATH')),看输出里有没有你which出来的路径
装什么插件?别碰 SublimeHaskell
SublimeHaskell 已停止维护,依赖 Python 3.3 和废弃的 ghc-mod,在 Sublime Text 4 上静默失效——装了也看不到类型提示、hover 空白、跳转进 GHC 源码里去。
- 必须装的是
Haskell IDE(作者 fpco 或 haskell),它基于 LSP 协议对接haskell-language-server - 顺带装
LSP插件(不是LSP-haskell,那个已废弃),它是语言服务器通信的底层桥梁 - 语法高亮用官方
Haskell语言包(Package Control 里搜 “Haskell” 安装即可) - 装完必须**完全重启 Sublime**,因为
haskell-language-server进程在启动时就绑定项目路径
为什么 Ctrl+Click 跳不到定义,或 hover 不显示类型?
这不是插件问题,是 haskell-language-server(HLS)根本没正确加载你的项目结构。
- 项目根目录必须有
.cabal文件或package.yaml;没有的话 HLS 静默降级,连日志都不打 - 打开
.cabal,确认所有import的第三方包都列在build-depends:下;本地子模块要用path:引入 - 改完配置后必须**完全重启 Sublime**(不是 Reload Project)
- 按
Ctrl+Shift+P输入Haskell: Restart Server,看右下角状态栏是否出现Haskell: Ready
Ctrl+B 能不能跑 Haskell?只适合单文件脚本
runhaskell 本质是解释器,不处理多文件、不解析依赖、不支持 import 非 Prelude 模块——它不是构建工具。
- 单文件测试可用:新建
Packages/User/Haskell.sublime-build,内容为{"cmd": ["runhaskell", "$file"], "selector": "source.haskell", "working_dir": "$file_path"} - 真实项目请放弃
Ctrl+B,改用终端执行stack run或cabal run - 如果非要集成进 Sublime,自定义构建系统里必须设
"working_dir": "${project_path}",否则在子目录下会找不到.cabal -
file_regex必须匹配错误格式,比如"^([^:]+):([0-9]+):([0-9]+):(.*)$",不然点击错误行号不会跳转
最易被忽略的点:HLS 启动慢且首次索引耗时长,右下角状态栏显示 “Haskell: Ready” 前所有功能都不可用;项目结构不对、PATH 不对、插件选错,三者任一出问题,提示就彻底消失——它不会报错,只会沉默。











