在 Zed 中配置 Standard ML 开发环境:Millet 语言服务器与 MLB/CM 工程文件的完整指南
【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed
Standard ML(SML)在 Zed 中并非开箱即用的内置语言,而是通过社区维护的 Standard ML 扩展提供支持,其语言服务器采用专为 SML 打造的 Millet(millet-ls)。本篇指南以 Zed 官方文档 Standard ML 为核心骨架,说明如何安装编译器与语言服务器、在 Zed 中安装扩展,以及如何通过millet.toml与 ML Basis(.mlb)/ SML/NJ Compilation Manager(.cm)根文件配置多文件工程,让代码补全、诊断与工程级分析真正可用。
Standard ML 支持在 Zed 中的架构定位
在 Zed 中,语言支持通常由四部分组成:语言元数据与配置、语法文法(Grammar)、Tree-sitter 查询(Queries)以及语言服务器,其中"每种语言都必须在语言的子目录中包含config.toml,并通过extension.toml注册 Tree-sitter 文法与语言服务器"的机制,可参考 语言扩展总览 一文。
对照 Zed 的语言支持清单,Standard ML 被列入 "Languages with Documentation" 分类,但其条目没有内置标记(*),这表明 SML 不是像 Rust、Python、Go 那样被直接编译进 Zed 的语言,而是依赖第三方扩展提供能力。具体的技术栈为:
- 语法文法(用于语法高亮、缩进、括号匹配等 Tree-sitter 相关功能):来自tree-sitter-sml文法;
- 语言服务器(用于补全、诊断、悬停等 LSP 能力):Millet(对外提供
millet-ls可执行文件)。
理解这一分工很重要:Zed 本身负责渲染与交互,而"理解代码"的工作绝大多数交给 Millet。因此,后续所有配置的核心目标,都是让 Zed 找到 Millet、并让 Millet 正确理解你的工程结构。
环境准备:编译器与语言服务器
根据官方文档的 Setup 章节,完整的配置需要两类可执行文件:
| 组件 | 作用 | 说明 |
|---|---|---|
| Standard ML 实现 | 编译与运行 SML 代码 | 可选 SML/NJ 或 MLton,二者与根文件格式的对应关系见下文 |
Millet(millet-ls) | 语言服务器 | 安装完成后需确保millet-ls位于$PATH中,Zed 启动语言服务器时才能发现它 |
安装编译器时,建议在同一个环境中同时准备 SML/NJ 与 MLton 中的至少一个,具体选择取决于你使用的工程格式:MLton 通常配合 ML Basis(.mlb)文件,SML/NJ 则配合其 Compilation Manager(.cm)文件。
Millet 的安装不通过 Zed 完成,需要按其官方安装说明独立安装,例如使用发行版打包或预编译产物,最终以命令行里存在millet-ls为验收标准。可以通过which millet-ls快速确认其是否已经进入 PATH。
在 Zed 中安装 Standard ML 扩展
按 安装扩展 的说明,扩展为 Zed 增加语言、主题、AI 工具等功能,浏览与安装统一在Extension Gallery中完成:
- 通过命令面板(Command Palette)执行
zed::Extensions动作打开扩展库; - 或在菜单栏选择Zed > Extensions。
在扩展库中搜索并安装社区维护的Standard ML扩展即可获得语法高亮与语言服务器接入能力。该扩展会注册对应的文法与语言服务器配置;关于扩展如何声明语言服务器、如何注册 Tree-sitter 文法等底层机制,可查阅 语言扩展总览 中的 "Grammar" 与 "Language Servers" 章节。
扩展的安装位置与"自动安装"
安装后的扩展位于系统特定目录,其中包含两个子目录:installed存放每个扩展的源码,work存放扩展自身运行时产生的文件(例如下载的语言服务器)。各平台路径如下:
- macOS:
~/Library/Application Support/Zed/extensions - Linux:
$XDG_DATA_HOME/zed/extensions或~/.local/share/zed/extensions - Windows:
%LOCALAPPDATA%\Zed\extensions
如果需要为团队或新机器自动化安装/卸载扩展,可以借助设置项auto_install_extensions(参考 全量设置参考)。该设置默认值为{ "html": true },取值为布尔型:true表示自动安装、false表示永不安装。例如:
{ "auto_install_extensions": { "html": true, "sml": true } }若希望核实某个扩展的确切名称,可以列出扩展安装目录下installed子目录的名称,例如 Linux 下执行:
ls ~/.local/share/zed/extensions/installed多文件工程配置:创建根文件与 millet.toml
这是 SML 支持中最关键的工程级步骤。与部分语言"逐文件独立分析"的模式不同,Millet 面向的是"整个工程由一个根文件定义"的模型:文档明确指出,对于含多个源文件的工程,Millet 期望存在唯一的根组文件(root group file)。因此,在 Zed 中打开的目录下需要创建一个millet.toml:
version = 1 [workspace] root = "sources.mlb"该文件的语义如下:
version = 1:Millet 配置文件格式版本,必须保留;[workspace]:定义工程工作区;root:工程根组文件的路径,上例指向sources.mlb,通常填写相对于该millet.toml所在目录(即你在 Zed 中打开的目录)的路径。
millet.toml应放在你在 Zed 中打开的目录下。如果你打开的是一个更大的父目录(例如整个代码仓库),而 SML 工程位于某个子目录中,那么需要把 Zed 的工作区定位到包含millet.toml的那一层,Millet 才能正确定位工程根。
根文件两种格式:MLB 与 CM
root字段指向的文件必须是下列两种格式之一:
| 扩展名 | 全称 / 归属 | 典型工具链 | 说明 |
|---|---|---|---|
.mlb | ML Basis(MLB) | MLton | ML Basis 文件通过$(SML_LIB)、$(Basis)等机制展开源码与库依赖,被 MLton 广泛采用 |
.cm | SML/NJ Compilation Manager(CM) | SML/NJ | SML/NJ 的编译管理文件,描述组成员(group)与依赖关系 |
选择哪一种根文件,主要取决于你的编译工具链与工程习惯:以 MLton 为主的工程使用.mlb,以 SML/NJ 为主的工程使用.cm。Millet 对二者均提供支持,因此在同一个millet.toml中,root既可以是sources.mlb,也可以是例如sources.cm。
可达性规则:哪些文件会被分析
理解 Millet 的分析边界,是避免"明明打开了文件却没有诊断"这类困惑的关键。官方文档明确说明:凡是从根文件出发、不能被传递到达(transitively reachable)的源文件,都不会被 Millet 分析。
换句话说,Millet 会从root指定的.mlb或.cm出发,沿着其中的引用关系递归展开所有源码与库文件;不在该依赖闭包内的文件,即使你在编辑器中打开,也无法获得语言服务器级别的补全与诊断。因此工程根文件必须真实、完整地包含你想要分析的全部源码,新增文件后也应记得把引用登记进 MLB/CM 文件(例如在.mlb中追加源文件路径),分析范围才会随之更新。
单文件场景则更简单:如果工程只有一个源文件、无需依赖闭包,理论上不需要额外的组文件结构即可获得基本编辑体验;但一旦涉及多个相互引用的源文件,就应当立即引入millet.toml+ 根文件来获得完整的工程级分析能力。
更多配置项与排查建议
millet.toml的更多可选项(例如工作区级的其它分析策略)收录在 Millet 官方手册中,可按需查阅,不必局限于上例的最小配置。实际使用中可留意以下几个问题:
- 语言服务器未启动 / 无诊断:优先检查
millet-ls是否安装且位于$PATH。Zed 通过扩展指定的命令启动语言服务器,若可执行文件不可见,将表现为完全没有 SML 相关诊断与补全。 - 多文件工程无补全:检查是否缺少
millet.toml,以及root指向的.mlb/.cm是否覆盖了你正在编辑的文件(可达性规则)。 - 改动了根文件后分析未更新:确认新增的源文件已写入 MLB/CM 组文件;Millet 的分析范围由根文件的依赖闭包决定。
- 工程目录定位:在 Zed 中打开的目录应包含
millet.toml,否则 Millet 无法把它与某一工程根关联起来。
小结
在 Zed 中使用 Standard ML 的关键路径可以概括为三步:安装编译器与millet-ls→ 通过扩展库安装 Standard ML 扩展 → 为多文件工程编写millet.toml并指定.mlb/.cm根文件。其中最后一步是 SML 特有的工程模型,也是发挥 Millet 语言服务器全部价值(诊断、补全、悬停、跳转)的前提。更完整的语言支持机制(文法注册、查询文件、语言服务器接入方式)可继续阅读 语言扩展总览 与 语言支持清单,Zed 侧的安装与自动化策略可参考 安装扩展 及 全量设置参考。
【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考