Release 23.10 Highlights
Helix 23.10 版本终于发布了!23.10 版本引入了一些非常重要的内部改进,从而实现了许多强大的功能。非常感谢所有为此次发布做出贡献的人!
初次接触 Helix? Helix 是一款模式文本编辑器,内置支持多重选择、语言服务器协议 (LSP)、tree-sitter,并提供对调试适配器协议 (DAP) 的实验性支持。
让我们来看看此版本的亮点。
多语言服务器支持
23.10 版本对我们处理语言服务器的方式进行了重大改进。 以前,每种语言一次只能支持一个语言服务器, 但现在您可以配置多个语言服务器协同工作。例如,您可以将 TypeScript 语言服务器用于 JavaScript/TypeScript 开发,同时 配置 efm-langserver 用于 Prettier 格式化和 ESLint 诊断。借助新的多语言服务器支持, 您可以指定从每个语言服务器使用哪些功能。
这使得语言配置 (languages.toml) 中语言服务器的配置方式发生了重大变化。
现在,所有语言服务器都与语言分开指定,然后每种语言选择要使用的语言服务器。
以上述示例为例,您可以像这样配置 efm-langserver 和 typescript-language-server:
[language-server.efm]
command = "efm-langserver"
config.documentFormatting = true
[language-server.typescript-language-server]
command = "typescript-language-server"
args = ["--stdio"]
config.hostInfo = "helix"
[[language]]
name = "typescript"
auto-format = true
language-servers = [
{ name = "efm", only-features = ["format", "diagnostics"] },
{ name = "typescript-language-server", except-features = ["format", "diagnostics"] },
]
更多详情请参阅语言配置文档.
使用 Nucleo 进行模糊匹配
Helix 使用“模糊”匹配功能在文件选择器等组件中实现实时输入过滤。之前我们使用的是流行
的 skim/fuzzy-matcher 库,但在 23.10 版本中,我们切换到了新
的 nucleo 库。Nucleo 的
速度比 skim 和 fzf 快得多,能够正确处理 Unicode 字符,并且使用了一种更直观的评分系统。
Nucleo 还使我们能够以惰性方式加载新项目,这极大地提升了文件选择器的用户体验。在上面
的 asciicast 演示中,我正在扫描计算机的 /nix/store 目录,这是一个包含超过两千
万个文件的巨大目录。现在,文件选择器会随着目录扫描的进行逐步工作,并在找到匹配文件时立即显示结果。
Nucleo 也为未来的文件选择器升级奠定了基础。敬请关注即将发布的版本说明,了解我们将如何改进文件选择器。
智能制表符
智能制表符是默认键位映射中与 Tab 键关联的一项新功能。当您按下 Tab 键且光标左侧的行不全是空格时,光标将跳转到语法树父节点的末尾。例如:
{
key = "value";
nested = {
key2 = "value2"; # When the cursor is at the end of the line here, <tab>
# jumps right after the closing brace on the next line.
};
}
这在像 Nix 这样的语言中非常有用,例如可以在属性集的末尾添加分号,或者在类似 C 语言的语言中跳转到代码块的末尾:
扩展了对 registers 的支持
registers 允许您保存和粘贴值。例如,您可以选择一个段落,使用 "ay 将其复制到 a registers,然后使用 "ap 粘贴该段落。但是,某些 registers 在读取或写入时具有特殊效果,例如 _“黑洞” registers:写入的任何值都会被丢弃,并且无法从中读取任何内容。特殊 registers 已扩展,包含了一些来自 Kakoune 和剪贴板的实用 registers:
%:当前缓冲区名称#:每个选区的编号,从 1 开始计数.:每个选区的内容*和+:系统剪贴板和主剪贴板
此外,还可以查看新的 registers 状态栏元素。当您使用 " 选择 registers 时,它会显示出来。请注意,在 asciicast 演示中,当我们选择 # registers 时,状态栏右下角会显示 reg=#,而当我们粘贴该 registers (p) 或增加选区 (C-a) 时,它就会消失。
初步支持 LSP DidChangeWatchedFiles 功能
一些语言服务器使用 DidChangeWatchedFiles 通知来检测其他语言相关文件的更改。
例如,rust-analyzer 会在你将新的依赖项添加到 Cargo.toml 文件时获取并
索引这些新的依赖项。Helix 现在会在文件被 Helix 本身修改时发送文件更改通知。
完全支持 DidChangeWatchedFiles 需要文件监视器,但目前我们能够支
持 DidChangeWatchedFiles 最常见的用例。
语法高亮显示正则表达式提示
现在,使用 s、S 或 | 创建的正则表达式提示符可以通过 tree-sitter-regex 进行语法高亮显示。
高亮显示使特殊字符更加醒目,并且可以捕获诸如末尾反斜杠之类的语法错误。
总结
一如既往,这只是 23.10 版本更新的冰山一角。查看更新日志了解完整详情。