Release 22.03 Highlights
从一些细小的用户体验改进和错误修复,到大型功能更新和代码重构,Helix 22.03 版本带来了一些令人兴奋的变化。 Helix 是一款模式文本编辑器,内置支持多重选择、语言服务器协议 (LSP)、tree-sitter,现在还支持调试适配器协议 (DAP)。
在介绍亮点之前,有一些管理方面的注意事项。
master 分支的更改现在与发布版本[文档][docs]分开发布。
您可以在这里找到新的 master 分支文档。
Helix 正在切换版本控制方案。新的版本将采用日历版本格式:YY.0M(.MICRO)。我们计划大约每两个月发布一个新版本。请查看[更新日志][changelog]了解此版本的所有新功能和修复。
健康检查
Helix 22.03 带来了新的 CLI 标志:hx --health。
使用新的健康检查标志来排查缺失的语言服务器和查询。
使用 hx --health 命令检查所有语言的运行状况,或使用 hx --health <lang> 命令查看特定语言的详细信息。
实验性 DAP 支持
调试适配器协议 (DAP) 是一种用于编辑器和调试器之间通信的抽象协议。它的设计理念与语言服务器协议 (LSP) 非常相似,但专为调试而设计。您可以使用 <space-d> 与调试适配器进行交互。
请注意,DAP 适配器目前仍处于实验阶段:尚未提供文档,可能存在 bug,并且用户体验也略显笨拙。我们非常欢迎您的贡献!
增量注入解析重写
Tree-sitter 驱动的语法高亮功能中最酷炫的特性之一是能够将一种语言“注入”到另一种语言的文档中。例如,如果您正在编写 Markdown 文档,可以使用如下代码块:
这是一段 Rust 代码:
println!("Hello, world!")
Helix 通过注入 tree-sitter-rust 来高亮显示 Rust 代码块。注入功能已重写,现在可以增量解析其中的更改,这在编辑包含大型注入代码块的文档时可以显著提高速度。
除了重写注入功能之外,Helix 现在还支持“组合”注入。例如,在对交互式 Elixir (IEx) 代码进行高亮显示时,我们可能会遇到如下代码块:
iex> send(self(), :hello)
iex> receive do: (:hello -> :ok)
IEx 语法会将 tree-sitter-elixir 注入到提示符标记后的每一行。 组合注入功能可以处理需要将单独注入的文档解析为一个组合文档的情况,例如:
iex> if true do
...> :ok
...> end
Helix 现在可以同时解析所有三行代码。将来,此功能可用于添加对 EJS 或 ERB 等模板语言的支持。
Tree-Sitter 语法重构
过去,Tree-sitter 语法仓库都是作为 Git 子模块添加到 Helix 仓库中的。然而,使用子模块可能会很麻烦,尤其是一个仓库中有超过 50 个子模块时更是如此。随着语言支持的改进,克隆、持续集成 (CI) 和打包所需的时间也越来越长。
Helix 22.03 版本彻底重构了 Tree-sitter 语法系统。最显著的变化是子模块被移除!如果您使用源代码,现在可以使用标准的 git clone https://github.com/helix-editor/helix 命令进行克隆。那么 Tree-sitter 子模块去哪儿了呢?它们已被两个新的命令行标志取代:hx --grammar fetch 用于将语法仓库克隆到运行时目录,hx --grammar build 用于编译它们。您也可以使用 -g 作为缩写。语法仓库会并行进行浅克隆,因此在网络连接良好的情况下,获取所有 60 个语法现在只需 6 秒。
如果您是从源代码构建或开发 Helix,请注意,获取和构建语法已包含在 helix-term 构建步骤中,因此您无需手动获取或构建语法。
此外,如果您想自定义要获取和构建哪些 Tree-sitter 语法,现在可以将 use-grammars 键添加到 languages.toml 文件的顶部:
如果您正在编写 Tree-sitter 语法,可以通过在 languages.toml 文件中将 Helix 指向语法的本地路径来尝试集成它,而无需将更改发布到远程 Git 仓库:
[[language]]
name = "mylang"
# ...
[[grammar]]
name = "mylang"
source = { path = "/local/path/to/tree-sitter-mylang" }
运行 hx -g build 将构建该语法。添加一些查询,您就可以开始交互式语法开发了。
接下来
下一个版本也一定会非常精彩。欢迎参与贡献,并在 GitHub 仓库 上关注开发进展, 也别忘了加入 Matrix 频道 参与讨论。