sublime text 找不到 ghc 或 runhaskell 是因未继承终端 path;需在 preferences.sublime-settings 中显式配置 env.path,macos 加 /users/you/.ghcup/bin:$path,windows 确保 %userprofile%\appdata\roaming\ghcup\bin 在系统 path 且 sublime 非管理员启动,重启后用控制台验证 os.environ.get('path')。

Sublime Text 找不到 ghc 或 runhaskell 怎么办
不是插件没装对,是 Sublime 启动时根本没拿到你终端里那个 PATH。macOS 从 Dock 启动、Windows 右键“以管理员身份运行”都会隔离环境变量。
- 先在终端运行
which ghc和which runhaskell,记下完整路径(比如/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')),看输出里有没有你刚才记下的路径
怎么让 Ctrl+B 直接运行单个 .hs 文件
默认构建系统不生效,必须手动建 HaskellRun.sublime-build,且命令和上下文要匹配真实场景。
- 新建文件
Packages/User/HaskellRun.sublime-build,内容为:
{
"cmd": ["runhaskell", "$file"],
"file_regex": "^([^:]*?):([0-9]+):([0-9]+):? ?(.*)$",
"selector": "source.haskell",
"working_dir": "$file_path"
}
-
cmd用runhaskell而非ghc -e:后者不支持模块,会报cannot find symbol main -
working_dir必须设为$file_path,否则readFile "data.txt"这类相对路径失败 - 保存后按
Cmd+Shift+P/Ctrl+Shift+P→Build System→ 选HaskellRun
为什么 Ctrl+Click 跳不到定义,或 hover 不显示类型
这不是 Sublime 或插件问题,是 haskell-language-server(HLS)压根没加载你的项目结构,静默降级到 GHC 内置模块。
- 项目根目录必须有
.cabal或package.yaml;没有的话 HLS 不报错也不索引 - 检查
.cabal的build-depends:是否列全了所有import的包;本地子模块要用path:引入 - 改完配置后必须**完全重启 Sublime**(不是 Reload Project),因为 HLS 进程绑定的是启动时的路径
- 按
Ctrl+Shift+P输入LSP: Restart Servers,看右下角状态栏是否出现HLS ready
想看完整类型签名(比如带 forall 和约束)怎么办
HLS 默认开启类型美化,把 forall a. Eq a => a -> a -> Bool 折叠成 a -> a -> Bool,但函数式开发常需原始签名来推理。
- 在项目根目录建
hls.yaml(HLS v2.1+ 支持),内容为:
{"plugins": {"ghcide": {"typecheck": {"showFullTypes": true}}}}
- 同时确保
hie.yaml存在且 cradle 配置正确,例如:
cradle:
direct:
arguments: []
- 改完后必须执行
Ctrl+Shift+P→LSP: Restart Servers;仅重启 Sublime 不生效 - 如果仍不显示,检查 HLS 版本是否匹配 GHC:GHC 9.4.x 需 HLS 2.4.x,错一个 patch 版本就可能忽略
hls.yaml
.cabal 或 package.yaml 时,HLS 会静默失效——连错误日志都不打,这是最常被忽略的死点。











