如何将Sublime配置为Haskell开发环境?

2026-04-29 02:341阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1142个文字,预计阅读时间需要5分钟。

如何将Sublime配置为Haskell开发环境?

Sublime Text 本身不支持运行 Haskell,它仅调用已安装的系统命令如 ghc、runhaskell 和 haskell-language-server。配置失败的原因大多是因为 Sublime 启动时未获取到正确的 PATH,或者项目结构未被语言服务器正确识别——可能是插件安装不足。

Sublime 找不到 ghcrunhaskell 怎么办

终端里能跑 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-settingsPATH 值参考 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.projecthie.yaml。HLS 启动成功 ≠ 项目识别成功;状态栏显示 HLS ready 只代表进程起来了,不代表它知道你在开发哪个 package。

标签:Sublime

本文共计1142个文字,预计阅读时间需要5分钟。

如何将Sublime配置为Haskell开发环境?

Sublime Text 本身不支持运行 Haskell,它仅调用已安装的系统命令如 ghc、runhaskell 和 haskell-language-server。配置失败的原因大多是因为 Sublime 启动时未获取到正确的 PATH,或者项目结构未被语言服务器正确识别——可能是插件安装不足。

Sublime 找不到 ghcrunhaskell 怎么办

终端里能跑 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-settingsPATH 值参考 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.projecthie.yaml。HLS 启动成功 ≠ 项目识别成功;状态栏显示 HLS ready 只代表进程起来了,不代表它知道你在开发哪个 package。

标签:Sublime