VSCode 本身不提供 Haskell 专属快捷键,所有运行、调试、格式化行为均依赖底层命令(如 runhaskell、ghci)是否就位、tasks.json 是否正确配置、项目结构(含 .cabal 或 stack.yaml)是否合法,以及 haskell.serverExecutablePath 是否设为绝对路径;缺一不可。

VSCode 本身不提供 Haskell 专属快捷键,所有“运行”“调试”“格式化”行为都依赖你是否配对了底层命令和项目结构;没装 runhaskell、没设 haskell.serverExecutablePath、或打开方式错成单文件,按什么键都没用。
Ctrl+Shift+B 运行不了?检查 tasks.json 和 runhaskell 是否就位
这个组合键本质是触发 tasks.json 里定义的 task,不是插件功能。常见失败原因:
-
runhaskell命令在 VSCode 集成终端里执行失败 → 说明~/.ghcup/bin(Linux/macOS)或%USERPROFILE%.ghcupin(Windows)没进 PATH,或根本没装 GHC -
tasks.json中"command"写成了ghci或stack run,但当前目录没有stack.yaml→ 报错Could not find stack.yaml -
"args": ["${file}"]指向的文件不含main :: IO (),或用了未声明的import→runhaskell直接退出,无输出
可靠配置只有一条路:用 runhaskell 跑单文件。确保 tasks.json 是这样:
{
"version": "2.0.0",
"tasks": [
{
"label": "Run Haskell File",
"type": "shell",
"command": "runhaskell",
"args": ["${file}"],
"group": "build",
"presentation": {
"echo": true,
"reveal": "always",
"panel": "shared",
"clear": true
}
}
]
}
如果 runhaskell 不在 PATH,把 "command" 改成绝对路径,比如 /home/you/.ghcup/bin/runhaskell 或 C:\ghcup\bin\runhaskell.exe。
F5 调试灰色不可用?launch.json + ghci + 项目结构三者缺一不可
F5 不是“点一下就进断点”,它依赖 VSCode 的调试器 + ghci + HLS 提供的模块上下文。三个条件必须同时满足:
-
launch.json必须存在且"type"设为ghci(不是haskell),例如:"type": "ghci"、"request": "launch"、"program": "${file}" - 当前文件必须能被
ghci加载:即不含语法错误、所有import已在.cabal的build-depends声明,或使用stack ghci启动 - VSCode 必须以
Open Folder方式打开含.cabal或stack.yaml的根目录 —— 否则 HLS 不加载,F5 灰色,右下角状态栏卡在Starting...
别指望 F5 自动识别单个 Main.hs。哪怕内容完全正确,只要没 .cabal 文件,F5 就不会激活。
Ctrl+Click 跳转失效?haskell.serverExecutablePath 必须填绝对路径
Haskell 插件(ID: haskell.haskell)默认只找 haskell-language-server,但它不认 haskell-language-server-wrapper,也不 fallback 到 ~/.ghcup/bin/。结果就是悬停无类型、跳转标红、状态栏不动。
解决方法只有一步:手动填死路径。
- 终端运行
which haskell-language-server(Linux/macOS)或Get-Command haskell-language-server(PowerShell)拿到完整路径 - VSCode 设置中搜
haskell.serverExecutablePath,粘贴进去,例如:/home/you/.ghcup/bin/haskell-language-server - 重启整个 VSCode 窗口(不是重载窗口),否则设置不生效
填 haskell-language-server-wrapper 会失败 —— 它只是个版本路由脚本,VSCode 的调试器和 LSP 客户端不支持它。
保存自动格式化不工作?fourmolu 和 formatter 配置必须绑定到 Haskell 语言模式
VSCode 的格式化是语言感知的,fourmolu 不会自动生效,必须显式告诉编辑器:“Haskell 文件保存时,用 fourmolu 格式化”。步骤如下:
- 先确保已安装
fourmolu:cabal install fourmolu或ghcup install fourmolu - 在 VSCode 设置中搜索
format on save,勾选Editor: Format On Save - 再搜
default formatter,找到Haskell > Format: Default Formatter,设为fourmolu - 确认
settings.json中有这段(自动生成):"[haskell]": { "editor.formatOnSave": true, "editor.defaultFormatter": "haskell.haskell" }—— 注意最后那个"haskell.haskell"是插件 ID,不是可执行名
如果保存后没反应,打开命令面板(Ctrl+Shift+P)输入 Format Document With...,选 fourmolu 手动试一次。失败就说明 fourmolu 命令不在 PATH,或没加执行权限(Linux/macOS 下可能需 chmod +x)。
最常被忽略的是:所有快捷键和自动行为都建立在“VSCode 正确加载了 HLS”之上;而 HLS 只在你用 Open Folder 打开含 .cabal 或 stack.yaml 的目录时才启动 —— 其他一切配置,都是在这之后才有意义。


















