sublime text 默认不识别 .hs 文件,因其未内置 haskell 支持,打开后显示“plain text”;必须安装官方 haskell 插件、正确配置 path、确保项目根目录含 .cabal/package.yaml/hie.yaml,三者缺一不可,否则语法高亮、类型提示、跳转等功能均失效。

Sublime Text 默认不识别 .hs 文件,也不提供任何 Haskell 语法高亮——这不是配置遗漏,是它压根没内置支持。装对插件、配好 PATH、项目结构合规,三者缺一不可,否则右下角永远显示 “Plain Text”。
为什么打开 .hs 文件还是纯文本?
Sublime Text 不像 VS Code 那样自动关联后缀,也不自带 Haskell 语言定义。即使你装了 GHC 和 HLS,.hs 文件仍会以 Plain Text 模式打开,关键词无色、缩进错乱、括号不匹配。
- 先确认文件是否被正确识别:右下角点击当前语言名(比如 “Plain Text”),选
Haskell;如果列表里没有,说明语言包没装或损坏 - 通过 Package Control 安装官方
Haskell插件(作者是sublimelsp),不是SublimeHaskell或ghc-mod——后者已停止维护且不兼容 Sublime Text 4 - 安装后重启 Sublime,再打开
.hs文件,右下角应显示Haskell,此时基础高亮(if、let、where等)才真正启用 - 某些主题(如 Monokai)对 Haskell 的
module、import、类型签名等 scope 支持弱,可额外装Syntax Highlighting for Haskell补强
如何让 Ctrl+B 运行单文件脚本?
默认 Build System 对 Haskell 是空的。runhaskell 是最轻量的执行方式,但只适用于无依赖、无 import 的单文件脚本,且要求 runhaskell 在 PATH 中可调用。
- 按
Tools → Build System → New Build System,粘贴以下内容并保存为Packages/User/Haskell.sublime-build:
{
"cmd": ["runhaskell", "$file"],
"selector": "source.haskell",
"file_regex": "^([^:]*?):([0-9]+):([0-9]+):"
}
runhaskell --version;若失败,请用 ghcup install ghc 安装 GHC,并把 ~/.ghcup/bin(macOS/Linux)或 %APPDATA%\ghcup\bin(Windows)加入系统 PATHrunhaskell 无法处理多文件项目或自定义模块导入;遇到 Could not find module 错误,说明它已超出能力范围,别硬调构建系统为什么类型提示、跳转定义全失效?
语法高亮只是表层,真正需要的类型检查、hover 提示、符号跳转,全部依赖 haskell-language-server(HLS)运行成功。而 HLS 启动失败时,Sublime 往往静默降级,状态栏不报错也不提示。
- 必须验证 HLS 是否就绪:终端执行
haskell-language-server --version;若报 command not found,说明没装或路径未纳入 Sublime 的环境变量 - 在 Sublime 控制台(
Ctrl+`)中运行import os; print(os.environ.get('PATH')),确认输出包含 HLS 所在目录(如/Users/you/.ghcup/bin) - 项目根目录必须有
.cabal、package.yaml或hie.yaml;空项目或仅含.hs文件时,HLS 启动即退出,插件不会提醒 - 装完
LSP和LSP-haskell插件后,务必彻底重启 Sublime(不是 reload project),否则 HLS 进程仍绑定旧路径
为什么 HLS ready 一直不出现?
状态栏长期卡在 “starting…” 或直接空白,大概率不是插件问题,而是 HLS 启动被阻塞——常见于版本错配、路径含空格、cradle 探测失败这三类情况。
- GHC 和 HLS 版本必须严格匹配:例如 GHC 9.4.5 要求 HLS 2.2.x;查 HLS 兼容表,错一个 patch 版本就可能无限等待
- 项目路径含中文或空格(如
/Users/me/My Project/)会导致 HLS 启动失败,macOS/Linux 用户建议用符号链接绕过 - Stack 项目需在项目根加
.lsp-config.json显式指定启动方式:{"haskell-language-server": {"command": ["haskell-language-server", "--stack"]}} - 首次打开大项目时,HLS 可能需 20–60 秒索引依赖;期间所有 LSP 功能不可用,但这是正常现象,不是配置失败
最容易被忽略的是:Sublime 启动时继承的 PATH 和你在终端里看到的未必一致,尤其 macOS 从 Dock 启动时完全不读 shell profile;验证 PATH 必须在 Sublime 控制台里做,不能只信终端输出。











