Helix 25.07 发布:全新文件浏览器、LSP 文档颜色支持与 Tree-house 技术升级
发布 25.07 高lights 期待已久的 Helix 25.07 版本终于在2025年7月15日发布了。这次更新不仅替换了 Helix 的一个主要核心组件,还添加了许多吸引人的新功能,涉及195位贡献者。以下是此次发布的亮点: 文件资源管理器 25.07 增加了通过 <space>e 快捷键启动的文件资源管理器。这个新的资源管理器以树状结构显示目录,支持模糊搜索。通过 Enter 键选择目录可以进入该目录的子资源管理器,选择文件则打开该文件。这使得用户更方便地浏览复杂的项目结构。 LSP 文档颜色功能 Helix 现在支持 Language Server Protocol (LSP) 规范中的文档颜色请求功能,可以从语言服务器(如 tailwindcss-language-server 或 vscode-css-language-server)获取文档中对应的颜色范围,并在文中直接显示颜色条。这一功能类似于 LSP 的 inline hints 功能,但针对颜色进行了优化,提升了代码的可读性。 命令模式增强 命令模式 (:) 用于执行可以输入的命令,如 :write 和 :quit。25.07 对命令解析器进行了彻底重写,修复了许多解析和补全的bug,同时引入了两个新特性:标志(flag)和扩展(expansion)。 标志 标志与 shell 命令中的标志类似,用于修改命令的行为。目前,:write 命令系列(以 :write 开头的命令)和 :sort 命令支持标志。例如,:sort --reverse 或 :sort -r 可以实现降序排序;:write 命令增加了 --no-format 标志,可以在不自动格式化的情况下保存文件。这些新增标志使得用户能够更加灵活地执行命令。 扩展 扩展引入了一种特殊的语法,用于插入变量值。变量可以基于当前编辑器的状态,如 %{buffer_name} 表示当前焦点文档的名称,%{cursor_line} 表示主光标的行号。还可以执行 shell 命令,如 %sh{git blame -L %{cursor_line},+1 %{buffer_name}} 可以在状态栏中显示当前行的 Git 责任信息。这些变量名和扩展类型都可以自动补全。 解析器重构 为了更好地处理文件名解析、支持标志和扩展,以及在命令行中间切换解析方法,25.07 对命令解析器进行了重构。例如,:set-option 和 :toggle-option 现在使用 serde_json 的流式解码器来处理复杂的配置值;:run-shell-command 和 :pipe 不再尝试解析命令名之后的内容,从而避免复杂的转义问题。 Tree-house 替代旧组件 在此次发布周期中,Helix 替换了原有的 Tree-sitter 组件,包括官方绑定及其大量旧代码,引入了新的组件 Tree-house。Tree-house 是从零开始编写的新库,旨在改进早期高亮器的不足之处。以下是一些关键改进: 插入(injection)的支持 插入是一种让某些节点切换到另一种语言的功能。例如,在 Markdown 代码块中,Helix 可以将内容高亮为 Rust 代码。这需要一个层次化的数据结构处理,新库 Tree-house 将整个文档表示为一个“树中树”结构,每个层都有自己的语法树。这样即使在复杂的嵌套情况下,也能正确处理各种语言的高亮。 增量插入 增量插入减少了重复解析和查询的工作量。例如,对于一个包含大量列表项的 Markdown 文件,编辑某个列表项时,只有根层和编辑过的“内联”层会重新解析和查询。这大大提高了编辑大型项目的效率。 局部变量(locals)的高亮 局部变量高亮功能解决了长期以来的一个问题:当变量定义超出视图范围时,局部变量的高亮会消失。Tree-house 在解析时跟踪定义,并将其存储在一个快速查找的树结构中,从而无论定义是否在视图范围内,都能始终保持正确的高亮效果。 未来发展 利用 Tree-house 的插入功能,未来 Helix 的各 Tree-sitter 基础功能(如注释标记、文本对象等)将在不同语言边界间表现出更一致的行为。例如,HTML <script> 标签内的注释将遵循 JavaScript 规则,而 Markdown 代码块中的缩进将遵循特定语言的规则。 业内评价及公司背景 Helix 的 25.07 版本得到了广泛好评,认为这是其发展的一个重要里程碑。作为一款模态文本编辑器,Helix 凭借其强大的多选支持、内置的 LSP 和 tree-sitter,以及实验性的 Debug Adapter Protocol (DAP) 支持,吸引了众多开发者。此次更新不仅提升了用户体验,还为其未来的拓展和发展打下了坚实的基础。