如何将Sublime配置为Haskell开发环境?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1142个文字,预计阅读时间需要5分钟。
Sublime Text 本身不支持运行 Haskell,它仅调用已安装的系统命令如 ghc、runhaskell 和 haskell-language-server。配置失败的原因大多是因为 Sublime 启动时未获取到正确的 PATH,或者项目结构未被语言服务器正确识别——可能是插件安装不足。
Sublime 找不到 ghc 或 runhaskell 怎么办
终端里能跑 ghc --version,但 Sublime 按 Ctrl+B 就报 sh: ghc: command not found,这是环境变量隔离导致的。Sublime(尤其 macOS 从 Dock 启动、Windows 右键“以管理员身份运行”)不继承 shell 的 PATH。
- macOS:编辑
~/Library/Application Support/Sublime Text/Packages/User/Preferences.sublime-settings,加这一行:"env": {"PATH": "/opt/homebrew/bin:/Users/you/.ghcup/bin:/usr/local/bin:$PATH"}(用which ghc输出的实际路径替换) - Linux:改
~/.config/sublime-text/Packages/User/Preferences.sublime-settings,PATH值参考echo $PATH输出 - Windows:确保
ghc所在目录(如C:\Users\You\AppData\Roaming\ghcup\bin)已加入系统PATH,且 Sublime 不是以管理员身份启动 - 验证方式:重启 Sublime,打开 Python 控制台(
Ctrl+`),执行import os; os.environ.get("PATH"),确认输出含ghc路径
为什么 Ctrl+Click 跳不到定义,或跳进 GHC 源码
这不是 Sublime 或插件的问题,而是 haskell-language-server(HLS)没正确解析你的项目依赖。它默认只索引当前 package,如果 import 了未在 .cabal 中声明的包,就会 fallback 到 GHC 内置模块。
- 检查项目根目录是否有
.cabal文件或package.yaml;没有的话 HLS 会静默降级,连日志都不打 - 打开
.cabal,确认所有import的第三方包都列在build-depends:下;本地子模块要用path:引入 - 改完配置后必须**完全重启 Sublime**(不是 Reload Project),因为 HLS 进程绑定的是启动时的项目路径
- 按
Ctrl+Shift+P输入Haskell: Restart Server,看右下角状态栏是否出现HLS ready
runhaskell 构建系统写法和常见坑
单文件快速测试用 runhaskell 最省事,但构建系统 JSON 写错一行就白配。别用插件自带的旧版 Haskell.sublime-build,它不带执行逻辑。
- 新建
HaskellRun.sublime-build,存到Packages/User/目录下: -
"cmd": ["runhaskell", "$file"]—— 不要用shell_cmd,避免 shell 解析干扰 -
"file_regex": "^(*?):([0-9]+):([0-9]+):? ?(.*)$"—— 必须匹配Foo.hs:12:5: error:格式,否则错误点不了 -
"working_dir": "$file_path"—— 确保readFile "data.txt"这类相对路径正常工作 - 文件名含空格?不用改,
$file自动加引号;但 Windows 上若用ghcup安装,要确认调用的是runhaskell.bat而非.exe
格式化不生效,stylish-haskell 配了也没用
现代 Haskell 插件把格式化交给 haskell-language-server(HLS)统一处理,默认用 ormolu,不是 stylish-haskell。你本地装了后者,HLS 也视而不见。
- 先确认
ormolu --version能输出版本,否则 HLS 启动时会静默禁用格式化 - 项目根目录建
hie.yaml,内容至少包含:cradle: {cabal: [{path: "./", component: "lib:your-pkg-name"}]}
再加一行:options: {formattingProvider: ormolu} -
stylish-haskell只能通过外部 build system 调用,但会打断 LSP 流程,补全和诊断可能失步,不推荐混用 - Windows 上路径含中文或空格,HLS 启动直接失败,报
Failed to parse result of calling cabal,请移走项目或改用英文路径
最常被忽略的其实是项目根目录有没有 cabal.project 或 hie.yaml。HLS 启动成功 ≠ 项目识别成功;状态栏显示 HLS ready 只代表进程起来了,不代表它知道你在开发哪个 package。
本文共计1142个文字,预计阅读时间需要5分钟。
Sublime Text 本身不支持运行 Haskell,它仅调用已安装的系统命令如 ghc、runhaskell 和 haskell-language-server。配置失败的原因大多是因为 Sublime 启动时未获取到正确的 PATH,或者项目结构未被语言服务器正确识别——可能是插件安装不足。
Sublime 找不到 ghc 或 runhaskell 怎么办
终端里能跑 ghc --version,但 Sublime 按 Ctrl+B 就报 sh: ghc: command not found,这是环境变量隔离导致的。Sublime(尤其 macOS 从 Dock 启动、Windows 右键“以管理员身份运行”)不继承 shell 的 PATH。
- macOS:编辑
~/Library/Application Support/Sublime Text/Packages/User/Preferences.sublime-settings,加这一行:"env": {"PATH": "/opt/homebrew/bin:/Users/you/.ghcup/bin:/usr/local/bin:$PATH"}(用which ghc输出的实际路径替换) - Linux:改
~/.config/sublime-text/Packages/User/Preferences.sublime-settings,PATH值参考echo $PATH输出 - Windows:确保
ghc所在目录(如C:\Users\You\AppData\Roaming\ghcup\bin)已加入系统PATH,且 Sublime 不是以管理员身份启动 - 验证方式:重启 Sublime,打开 Python 控制台(
Ctrl+`),执行import os; os.environ.get("PATH"),确认输出含ghc路径
为什么 Ctrl+Click 跳不到定义,或跳进 GHC 源码
这不是 Sublime 或插件的问题,而是 haskell-language-server(HLS)没正确解析你的项目依赖。它默认只索引当前 package,如果 import 了未在 .cabal 中声明的包,就会 fallback 到 GHC 内置模块。
- 检查项目根目录是否有
.cabal文件或package.yaml;没有的话 HLS 会静默降级,连日志都不打 - 打开
.cabal,确认所有import的第三方包都列在build-depends:下;本地子模块要用path:引入 - 改完配置后必须**完全重启 Sublime**(不是 Reload Project),因为 HLS 进程绑定的是启动时的项目路径
- 按
Ctrl+Shift+P输入Haskell: Restart Server,看右下角状态栏是否出现HLS ready
runhaskell 构建系统写法和常见坑
单文件快速测试用 runhaskell 最省事,但构建系统 JSON 写错一行就白配。别用插件自带的旧版 Haskell.sublime-build,它不带执行逻辑。
- 新建
HaskellRun.sublime-build,存到Packages/User/目录下: -
"cmd": ["runhaskell", "$file"]—— 不要用shell_cmd,避免 shell 解析干扰 -
"file_regex": "^(*?):([0-9]+):([0-9]+):? ?(.*)$"—— 必须匹配Foo.hs:12:5: error:格式,否则错误点不了 -
"working_dir": "$file_path"—— 确保readFile "data.txt"这类相对路径正常工作 - 文件名含空格?不用改,
$file自动加引号;但 Windows 上若用ghcup安装,要确认调用的是runhaskell.bat而非.exe
格式化不生效,stylish-haskell 配了也没用
现代 Haskell 插件把格式化交给 haskell-language-server(HLS)统一处理,默认用 ormolu,不是 stylish-haskell。你本地装了后者,HLS 也视而不见。
- 先确认
ormolu --version能输出版本,否则 HLS 启动时会静默禁用格式化 - 项目根目录建
hie.yaml,内容至少包含:cradle: {cabal: [{path: "./", component: "lib:your-pkg-name"}]}
再加一行:options: {formattingProvider: ormolu} -
stylish-haskell只能通过外部 build system 调用,但会打断 LSP 流程,补全和诊断可能失步,不推荐混用 - Windows 上路径含中文或空格,HLS 启动直接失败,报
Failed to parse result of calling cabal,请移走项目或改用英文路径
最常被忽略的其实是项目根目录有没有 cabal.project 或 hie.yaml。HLS 启动成功 ≠ 项目识别成功;状态栏显示 HLS ready 只代表进程起来了,不代表它知道你在开发哪个 package。

