sublime text 的 haskell 插件不弹出 ghci 是因未安装 ghc 或 path 未配置;ctrl+b 构建失败是因 runhaskell 不支持多文件项目;lsp 卡顿源于 hls 启动慢且需版本匹配;非标后缀需手动关联语法和设置 syntax_files。

Sublime Text 装完 Haskell 插件为啥 ghci 不弹出来?
根本原因是 Sublime Text 本身不带 Haskell 运行时,插件只是“调度员”,ghci 必须已安装且能被系统 PATH 找到。常见错误是只装了 stack 或 cabal,但没装 GHC,或者装了却没加进环境变量。
实操建议:
- 终端运行
ghci --version,有输出才说明 GHC 就绪;没有就去 ghcup 装(别用系统包管理器,容易版本错乱) - Windows 用户尤其注意:PowerShell 和 CMD 的 PATH 可能不同,Sublime 默认继承的是 CMD 环境,改完 PATH 后要彻底重启 Sublime(不是 reload project)
- 插件推荐用
Haskell-Sublime(GitHub 上sublimelsp/LSP-haskell是 LSP 方案,对新手略重),它依赖haskell-ghc-mod或haskell-language-server,后者更现代——但必须手动指定路径,在插件设置里填"haskell_language_server_path": "/path/to/haskell-language-server"
为什么 Ctrl+B 构建 Haskell 文件总报 Could not find module?
Sublime 的默认构建系统只调 runhaskell,它不处理多文件项目或依赖,遇到 import 就跪。这不是配置错,是能力边界问题。
实操建议:
- 单文件脚本:把第一行加上
{-# LANGUAGE NoImplicitPrelude #-}并确保没 import 非 Prelude 模块,再用runhaskell才稳 - 真实项目:放弃
Ctrl+B,改用终端 +stack run或cabal run;如果非要集成进 Sublime,得自定义构建系统,比如写个Haskell-Stack.sublime-build,内容里"cmd": ["stack", "run"],并设"working_dir": "${project_path}" - 别信网上“一键配置 build system”的 JSON 片段,它们大多忽略
working_dir和selector,导致在子目录下构建失败
LSP-haskell 补全慢、跳转卡、hover 不显示类型?
核心瓶颈不在 Sublime,而在 haskell-language-server(HLS)的启动和索引过程。它要解析整个项目依赖树,首次加载可能耗时 30 秒以上,期间所有功能都假死。
实操建议:
- 确认 HLS 版本与 GHC 版本严格匹配(例如 GHC 9.2.8 → 用 HLS 2.0.x,查 兼容表),错一个 patch 版本就可能无限 loading
- 项目根目录下放
hie.yaml显式声明 cradle 类型,比如 Stack 项目写cradle: {stack: {component: "myproj:lib"}},避免 HLS 自动探测失败 - 关掉不用的 LSP 功能:在 LSP 设置里禁用
"semantic_highlighting"(Sublime 渲染负担大),保留"completion"和"signatureHelp"就够用
怎么让 Sublime 正确识别 .hs-boot 或 hsx 这类非标后缀?
Sublime 默认只认 .hs,其他后缀不会触发语法高亮、构建、LSP 等任何 Haskell 相关逻辑,连括号匹配都失效。
实操建议:
- 菜单栏 → View → Syntax → Open all with current extension as… → Haskell,这样当前文件和同后缀文件都会生效
- 永久生效需改 User 设置:打开
Preferences → Package Settings → Haskell-Sublime → Settings,加一行"syntax_files": ["Packages/Haskell/Haskell.sublime-syntax"],再在View → Syntax → Open all with current extension as…里选一次,Sublime 就会记住映射 - 注意
.hs-boot文件不能被 HLS 加载(GHC 内部机制限制),补全和跳转必然失效,这是语言设计决定的,不是配置问题
最麻烦的其实是项目结构感知——HLS 对 stack.yaml 位置、package.yaml 格式、甚至 cabal file 的缩进都敏感,一个空格不对就拒绝工作。与其反复调配置,不如先用 haskell-language-server --debug . 在终端跑一遍,看它卡在哪行日志,比在 Sublime 里盲猜快得多。











