news 2026/9/7 19:57:40

在 Zed 中配置 Standard ML 开发环境:Millet 语言服务器与 MLB/CM 工程文件的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Zed 中配置 Standard ML 开发环境:Millet 语言服务器与 MLB/CM 工程文件的完整指南

在 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字段指向的文件必须是下列两种格式之一:

扩展名全称 / 归属典型工具链说明
.mlbML Basis(MLB)MLtonML Basis 文件通过$(SML_LIB)$(Basis)等机制展开源码与库依赖,被 MLton 广泛采用
.cmSML/NJ Compilation Manager(CM)SML/NJSML/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 官方手册中,可按需查阅,不必局限于上例的最小配置。实际使用中可留意以下几个问题:

  1. 语言服务器未启动 / 无诊断:优先检查millet-ls是否安装且位于$PATH。Zed 通过扩展指定的命令启动语言服务器,若可执行文件不可见,将表现为完全没有 SML 相关诊断与补全。
  2. 多文件工程无补全:检查是否缺少millet.toml,以及root指向的.mlb/.cm是否覆盖了你正在编辑的文件(可达性规则)。
  3. 改动了根文件后分析未更新:确认新增的源文件已写入 MLB/CM 组文件;Millet 的分析范围由根文件的依赖闭包决定。
  4. 工程目录定位:在 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 19:55:20

深入解析 Java GC 调优:减少 Minor GC 频率,优化系统吞吐

目录 一、问题描述 (一)GC 频率与影响 1. GC 频率统计 2. GC 对请求延迟的影响 2.1 Minor GC 影响的请求数 2.2 Major GC 影响的请求数 3. TP90/TP99 的影响 (二)主要问题 1. Minor GC 过于频繁 2. Major GC 触发频率偏高 二、分析 GC 机制 (一)Java 内存回收…

作者头像 李华
网站建设 2026/9/7 19:51:44

光伏设计数据不同源?一体化设计软件让排布电气结构清单同步

做分布式光伏设计的朋友应该都有过这种经历:CAD摊开画排布,Excel开着算电气,结构校核还得再切到另一个工具,最后汇总清单时发现,图纸上画了186块组件,BOM表里却变成192块。我之前复核一个朋友的工商业屋顶项…

作者头像 李华
网站建设 2026/9/7 19:51:39

办公自动化|HR 表单重复录入怎么办?AI 自动填充 Word 文档实践

一、业务痛点 HR 工作中存在大量文档表单工作:新员工入职登记表、信息采集表、社保公积金配套文档。不同文档大量字段复用,姓名、身份证、紧急联系人等信息反复复制粘贴。 事务性录入占用大量工时,挤压员工沟通、培训、人才发展等高价值工作时…

作者头像 李华
网站建设 2026/9/7 19:51:07

【单片机课程设计/毕业设计】基于单片机 DHT11 的环境温湿度智能加湿平台设计 集成语音识别的 STM32/51 单片机室内加湿智能终端设计(024906)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/7 19:50:54

公众号小编转型指南:AI 时代你的核心竞争力在哪

![职场写作场景](https://images.pexels.com/photos/8518730/pexels-photo-8518730.jpeg?autocompress&cstinysrgb&w1080)*图源:Pexels artempodrez(免费商用授权)* 作为一个亲历了 AI 冲击全程的公众号编辑,这篇想写给自…

作者头像 李华