Neovim 中文周刊 第 6 期

欢迎收看第 6 期 Neovim 中文周刊!

本期周刊包含以下版块:

  • Neovim 开发近况:摘录近期合并的 PR,以新功能为主
  • 社区资讯:摘录近期更新的 Issue 讨论以及 Reddit 等论坛的热门话题
  • 插件推荐

Neovim 开发近况

vim-patch:9.1.{1253,1283,1287} (#33381)

新增了两个选项 chistorylhistory,用于控制 :h quickfix-stack 的容量。过去 quickfix/location list stack 的容量无法设置,被硬编码为了 10。

vim-patch:0b540c6: runtime(help): add omni completion and 'iskeyword' to filetype plugin (#33398)

该 PR 为 help 文件设置了 omnifunc,提供 help tags 的补全。作者认为在写帮助文档的时候,想要查找 help tag 只能用 :help 命令找很不方便,有了 help tags 的补全能改善帮助文档写作体验,这有助于帮助文档作者在写作的时候多用 help tags 链接各个文档。

此外,该 PR 还为 help 文件设置了 iskeyword 从而能在 :edit 打开的 help 文件里使用 <C-]> 跳转,此前 Vim 只为由 :help 命令创建的 buffer 进行了设置。

feat(health): summary report in section header (#33388)

:checkhealth 的每一小节的开头显示总结,效果如下:

checkhealth summary

feat(meta): vendor luv meta files (#33375)

LuaCATS/luv 打包进 $VIMRUNTIME 随软件分发,这些文件用于为 lua-language-server 等工具提供 vim.uv 的类型信息。如果您在使用 lazydev.nvim,可以将其中关于 vim.uv 的配置去掉了。

此外,clason 提到 LuaCATS/luv 已经基本上没有在维护了,接下来的目标是

  • 修复这些文件,跟上最新版本的 libuv
  • 使用 Neovim 的帮助文档生成框架从这些文件中生成 :h luvref
  • 贡献到上游 luvit/luv

社区资讯

alternative to C for Nvim core (#30678)

Neovim 使用了许多静态分析工具和编译器选项加固现有的 C 代码,但仍然存在以下问题:

  • 内存管理复杂,容易出错:无效指针、数组越界等,而 ASAN 并不能找出所有内存问题
  • 缺乏现代编程语言抽象,如:缺乏泛型、字符串以 0 结尾等

因此开发者希望选出一种“更好的 C”,能够近乎零成本地逐步迁移到这个新语言,并且至少保持现有的优势:

  • 广泛的跨平台支持
  • 快速构建
  • 优秀的 C 互操作性

目前的讨论中有以下候选者:

  • Rust。一如既往,Rust 开发者展现出对将项目迁移至 Rust 的强烈热情。不过仅从该 Issue 中的讨论来看维护者们对 Rust 并没有表现出太多兴趣,主要的顾虑在于 Rust 与 C 的互操作性。此外,也有开发者表达了对发生类似近期 Linux 内核引入 Rust 引发的矛盾的担忧。
  • Zig。最大的优势在于良好的 C 互操作,以及本身也是一个 C 编译器,可以替代 Neovim 当前使用的 CMake。最大的缺点在于 Zig 仍在测试阶段,且工具设施不是很完善。似乎社区和维护者对 Zig 的认可度更高,值得注意的是核心开发者 bfredl 的 Draft PR #28344 正在尝试使用 Zig 替代 CMake 作为 Neovim 的构建系统。

其中,Go 由于 C 互操作性不理想不予考虑。当然,开发者们没有忘记 C++,它同样在提案的候选者名单里,不过只有一句描述

conflicts with Lua's garbage collector, because it is garbage

好强的攻击性啊(汗)。

Announcing Lux - a Modern Package Manager for Lua

lux 是由 rocks.nvim 的开发团队推出的一个全新的 Lua 包管理器,旨在替代 LuaRocks。当前仍在测试阶段,但开发团队声称 lux 已达到高度可用的阶段。

lux 的设计参考了 Rust 的包管理器 Cargo,

  • 使用 lux.toml 描述文件进行项目依赖和构建流程的管理
  • lx fmt 使用 StyLua 进行代码格式化
  • lx check 使用 luacheck 进行代码检查
  • 原生支持 busted 运行测试,支持使用 Neovim 作为默认 Lua 解释器
  • 更好的可移植性,自动安装对应版本的 Lua 头文件
  • 兼容现有的 LuaRocks 项目

同时,开发团队也正在重写 rocks.nvim 以迁移至 lux。

从 Reddit 社区的评论反馈来看,社区大有一种“天下苦 LuaRocks 久矣”的情绪,期待 lux 能取代 LuaRocks 成为新的 Lua 生态标准。

此外,值得注意的是 Neovim 正在计划推出官方的插件规范 packspec,该规范仍然处于 ALPHA 阶段,justinmk 在 Neovimconf 2024 的演讲中表示 "There’s like 5% remaining to do on the spec",插件管理器 lazy.nvim 提供了对 packspec 的实验性支持。

PS: 关于上文提及的 justinmk 在 Neovimconf 2024 的演讲内容,您可以查看录播或者关于该演讲的一篇报导

插件推荐

auto-cmdheight.nvim

此插件动态调整您的 cmdheight 大小以适应通过 vim.api.nvim_echo()vim.print()print() 显示的消息内容,这避免了繁琐的 "Press Enter" 提示。

值得注意的是 No more "Press Enter" 这一诉求也在 Neovim Roadmap 的 0.12+ 目标中,同样,justinmk 在 Neovimconf 2024 的演讲中表达了对移除 "Press Enter" 的迫切希望。

关于

对不起,这周又每天都忙着打苍翼:混沌效应了,更肝不动周刊了,忏悔忏悔~

那么,一如既往,希望本期周刊能对您有所裨益,感谢您的阅读。

  • 周刊项目地址 | RSS 订阅
  • 我不是 Neovim 贡献者,也不是任何有影响力的插件贡献者,甚至算不上一个 (Neo)vim 老手,我的观点很可能错漏百出。如果您希望贡献本周刊,请收下我的感谢并查看贡献指南
  • 发布日期:2025-04-12 修订日期:2025-04-12