关于用户数据的照管:NeoVim 导致 Vim 的 undo 文件被删除
Neovim 的持久化 undo 功能的一项变更导致它覆盖或删除了现有的 undo 历史文件,包括 Vim 生成的文件,使一些用户丢失了多年编辑历史。评论者就这是否反映了现代和开源软件中更深层的“照管义务”缺失展开争论,把法律免责声明和“免费礼物”式说法,与用户合理期待工具不会静默破坏数据的观念对立起来。讨论进一步延伸到向后兼容性、道德责任与法律责任的区别,以及广泛使用的自由工具维护者究竟该对依赖它们的人承担多少照顾义务。
Neovim 持久化 undo 变更与数据丢失
- Neovim 更改了其持久化 undo 文件格式,以支持字节级变更事件(用于 tree-sitter、LSP 等)。
- 当遇到旧格式的 undo 文件时,Neovim 会直接删除并替换它,而不是迁移或忽略它。
- 如果 Vim 和 Neovim 配置为共享同一个
undodir,这也会破坏 Vim 的 undo 历史;默认情况下它们的目录不同,因此只有在共享配置时才会发生冲突。 - 有人认为 Neovim 本该使用不同的文件名/目录、忽略旧文件,或者至少发出警告或先备份;也有人认为,对于一个从根本上有问题的格式来说,这样的破坏是合理的。
照管义务 vs “它是自由软件”
- 一方认为:即使是免费/开源软件,也有道德义务不要静默破坏用户数据,尤其是由另一个程序生成的数据;免责声明和许可证并不能抹去伦理责任。
- 反对观点:维护者提供的是无偿劳动,除了许可证之外并无此类义务;如果你想要不同的行为,那就贡献、分叉,或者别用它。
- 也有人拒绝这种法律主义式辩护:即使“AS IS”可以限制责任,也不能免于声誉上的影响或批评。
- 许多人认为,Neovim 的这一选择,以及它最初对投诉所采取的防御性回应,体现了更广泛的软件“用户友好性下降”。
用户预期、undo 语义与工作流
- 有些人认为持久化 undo 只是用于崩溃或误退出的轻量安全网,而不是长期历史存储;他们认为把它当作备份是误用,应该使用正确的 VCS/备份方案。
- 另一些人指出,这个功能字面上就叫“persistent undo”,文档也说明它会保留历史;他们的工作流跨越数周甚至数月,因此对这种静默删除感到措手不及。
- 关于数据位置也有争论:有人声称
~/.cache中的 undo 本质上是临时性的;也有人指出 Neovim 文档将其放在 state 下,而且无论如何,是应用本身选择了删除它。
Vim vs Neovim 以及替代方案
- 有些人认为继续使用 Vim 是明智的,理由是它的稳定性和长期向后兼容性。
- 另一些人则认为 Neovim 改进了默认设置、异步插件和现代 IDE 式功能,而为了进步,破坏性变更是可以接受的。
- 还有人建议使用其他编辑器(Helix、ki、带本地历史的 IDE)或者直接用 Git/etckeeper/备份脚本进行版本管理。
政治 / 社会议题支线
- 讨论的一部分转向了关于 Neovim 曾使用、后来又移除的一段引自某位极具争议人物的话的争议,以及对“给极端政治观点提供平台”的指责。
- 评论者在这件事上分歧明显:有人认为这是夸大的“群体”行为,也有人认为这确实反映了项目是否应当认可某些人物的正当担忧。