Neovim 中文周刊 第 6 期
欢迎收看第 6 期 Neovim 中文周刊!
本期周刊包含以下版块:
Neovim 开发近况
vim-patch:9.1.{1253,1283,1287} (#33381)
新增了两个选项 chistory
和 lhistory
,用于控制 :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
的每一小节的开头显示总结,效果如下:
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" 的迫切希望。
关于
对不起,这周又每天都忙着打苍翼:混沌效应了,更肝不动周刊了,忏悔忏悔~
那么,一如既往,希望本期周刊能对您有所裨益,感谢您的阅读。