sublime text需手动集成purs和purs ide才能支持purescript:安装purescript插件并绑定.purs语法,配置purs_path和ide_path启用语言服务,编写.sublime-build文件实现编译/repl,依赖spago.dhall声明的包才能跳转和补全。

Sublime Text 本身不原生支持 PureScript,必须手动集成 psc(PureScript Compiler)和语言服务器(purs IDE),否则连语法高亮、保存检查、跳转定义都做不到。
如何让 .purs 文件正确高亮并识别语法
PureScript 的 .purs 文件默认被 Sublime 当作纯文本处理。这不是插件没装,而是没绑定语法定义。
- 先通过 Package Control 安装
PureScript插件(推荐官方维护版,GitHub 名为pure-script-sublime;避免安装已停更的Purescript-Sublime或SublimePurescript) - 安装后打开任意
.purs文件 → 点击右下角语法名(如 “Plain Text”)→ 选择 “PureScript” - 为防新建文件不自动识别,在
Preferences → Settings – Syntax Specific中加一行:"extensions": ["purs"] - 若仍无高亮,检查插件是否启用:打开命令面板
Ctrl+Shift+P,输入Enable Package,确认PureScript在列表中且已勾选
为什么保存后不报错、也不类型检查
因为 PureScript 插件默认不启动语言服务,purs ide 没运行,或路径没配对 —— 这是 PureScript 开发中最常见的静默失败点。
- 确保项目根目录有
purs.json或spago.dhall(Spago 项目优先);没有配置文件时,purs ide会直接退出 - 在
Preferences → Package Settings → PureScript → Settings中填入有效路径:
{
"purs_path": "./node_modules/.bin/purs",
"ide_path": "./node_modules/.bin/purs",
"enable_ide": true
}
-
purs_path必须指向可执行的purs(不是psc);全局安装(npm install -g purs)时可用/usr/local/bin/purs(macOS/Linux)或C:\Users\xxx\AppData\Roaming\npm\purs.cmd(Windows) - 如果用 Spago,建议统一用
./node_modules/.bin/spago+"ide_path": "./node_modules/.bin/spago",并确保spago ide可运行 - 重启 Sublime 后看状态栏:出现
PureScript: Ready才算语言服务真正就位;否则查控制台Ctrl+`是否有Error: spawn ENOENT或Failed to start purs ide
怎么用 Ctrl+B 编译或运行 PureScript 代码
Sublime 没有内置构建逻辑,必须手动写 .sublime-build 文件,且要区分构建目标(生成 JS、启动 REPL、运行测试)。
- 创建新构建系统:
Tools → Build System → New Build System - 写一个基础编译构建(假设用 Spago):
{
"cmd": ["spago", "build"],
"working_dir": "$project_path",
"selector": "source.purescript",
"file_regex": "^(.*?):([0-9]+):([0-9]+): (.*)$"
}
-
file_regex是关键:PureScript 错误格式为src/Main.purs:12:5: Error ...,正则必须匹配三段数字,否则跳转不到错误行 - 想一键启动 REPL:把
"cmd"改成["spago", "repl"],但注意这会阻塞构建面板,更适合用SublimeREPL插件配合 - 若用 Pulp,替换
spago为pulp,但注意 Pulp 已基本被 Spago 替代,旧项目才需兼容
跳转定义和自动补全为什么失效
PureScript 插件的符号索引依赖 purs ide 输出的 JSON-RPC 响应,而它只索引当前项目中 spago.dhall 显式声明的依赖包,不会扫描 node_modules 或全局安装的库。
- 首次打开项目后,等待状态栏显示
PureScript: Indexing...→PureScript: Ready;这个过程可能耗时 10–60 秒,取决于依赖数量 -
Ctrl+Click只能跳转到本项目源码或spago.dhall中packages列出的模块(如Effect,Console),无法跳进未声明的第三方包 - 补全项来自当前模块的导入语句(
import Data.List)和 IDE 推导的类型约束,不是全量函数库;没 import 就不会出现在补全列表里 - 如果跳转后空白或报错,检查
spago.dhall是否包含effect,console等基础包;缺失会导致 IDE 加载失败
最易被忽略的是:PureScript 的 IDE 支持高度依赖项目结构一致性 —— spago.dhall、src/ 目录层级、模块命名与文件路径严格对应,任何偏差都会导致符号解析中断,且错误不提示。











