计算机科学家大卫·奇斯诺尔(David Chisnall)的一条帖子以很符合未颂(Unsung)风格的方式开头:他自约2000年起使用 vim(Vim),写了五本书、一篇博士论文、数十篇论文和超过150篇文章,常用命令已成本能,用其他编辑器时文中会误插 :w。他接着谈到 vim 的持久撤销功能,虽不常用却曾在误删内容或整理后出问题时帮其找回历史版本,且 vim 在约20年的大版本升级中一直保留此能力。
正文
计算机科学家 David Chisnall 的一条 Mastodon 帖子有个非常 Unsung 的开场:
我从 2000 年左右开始用 vim。我用它写了五本书、一篇博士论文、几十篇论文和 150 多篇文章。到如今,我用一堆常用 vim 命令时,高级脑功能完全不参与了,它们就那么自己发生。我用别的工具写的文档,中间会冒出随机的 :w。
Chisnall 接着谈到 vim 的一个具体功能:
持久撤销是我最喜欢的 vim 功能之一。
我不常需要持久撤销。但少数需要它的时候,它无比宝贵:哎呀,我从这个文件里删掉了点什么,也许是上周、重启过一次之前的事,那到底是什么?一直撤销到找到它,复制,粘贴进当前版本。或者更常见一点:我这儿本来是能跑的,然后我整理了一下准备提交,现在不跑了,我到底改了什么?
vim 在大约 20 年里、跨越大版本升级,一直让这个功能可用。我甚至不会去想它,它就是拉斯金第一定律的一部分:程序不得伤害用户的数据,或通过不作为让用户的数据受到伤害。如果 vim 或电脑崩溃,或者我关掉一个文件、六个月后再回来,我的撤销历史还在那里。
NeoVim 是 vim 的一个分支(最近因其他原因上了新闻):
所以我在 NeoVim 还很新的时候试了它。你熟悉的 vim,但更好?太棒了!
我在 NeoVim 里注意到的第一件事是撤销不工作。我用 vim 打开文件,撤销在那儿也不工作。
Neovim 改了撤销文件的格式。它没有升级旧文件,也没有给自己的撤销文件另起名字。它只是发现了一个 vim 撤销文件的存在,把它删掉(丢掉里面所有数据),再换上一个 vim 读不了的文件。
我就此提了 issue,得到的回复是:持久撤销格式不稳定,用户不该指望一个明确叫“持久撤销”的功能会保住数据。它已经改过一次,大概还会再改。
我的 NeoVim 体验就此结束。作者们立刻表明,他们绝对不能被信任来掌管我的任何数据。破坏持久撤销,我可以当作 bug 原谅;但那种态度——就因为它是你文件系统上一个持久文件、里面装着你可能想要的数据,你的程序也没有理由不删它——意味着他们对用户毫无照护义务的概念。
我喜欢这个帖子(我几乎全文引用了它),因为它讲到了几件重要的事:
- 我从没听说过这样的持久撤销,它看起来相当厉害。
- 人们会记住软件丢掉他们的心血,或者对他们不敬。
- “它已经改过一次,大概还会再改”能激起多么强烈的感受,我完全能理解。
我也喜欢它引出了拉斯金第一定律。以 Macintosh 和 Canon Cat 闻名的杰夫·拉斯金,在 2000 年的《人本界面》里整理了这三条定律:
- 计算机不得伤害你的工作,或通过不作为让你的工作受到伤害。
- 计算机不得浪费你的时间,或要求你做超出严格必要范围的工作。
- 一个界面,如果对人类需求有回应、对人类弱点有体谅,才是人本的。
我年轻时作为设计师读到这本书,它对我非常重要,也塑造了我。我不知道这些定律怎么到今天才第一次出现在 Unsung 上。
评论
讨论围绕 Neovim 一次持久化撤销格式的破坏性变更展开,有人愤怒于文件被删,有人坚称免费软件本就没有关怀义务。分歧主轴是:开源维护者对用户是否负有某种责任,以及向后兼容在编辑器这类长期工具中到底值多少。
开源软件是礼物,开发者没有义务照顾用户
- 免费赠送的软件不附带责任,用户可以礼貌请求,也可以在对方不维护兼容时主动帮忙实现,但不能要求作者必须“在乎”用户——送出软件本身已经是关怀的体现。(较多人) > 意译:开源开发者免费送软件,没有义务,我们可以礼貌请求,但不能要求他们必须如此。(@recursivedoubts)
- 对用户的承诺应当是明确说出的,而不是默认存在的;把“关怀义务”当成理所当然,只会让自己失望。(较多人)
- 许可证里早就写明不提供担保、不保证适用于特定目的,期待它适用属于用户自己的责任。(较多人)
这次变更确实伤害了用户,Neovim 处理失当
- 有 Neovim 用户回想起来曾遭遇无法撤销的情况,怀疑正是升级后格式变更导致;如果程序不认识旧格式就直接删除,升级等于抹掉历史,这让人开始考虑弃用。(较多人) > 意译:作为 Neovim 用户,我这才意识到自己可能也中过招,升级后无法撤销,如果格式不稳定就删文件,那真该考虑换编辑器了。(@gavinhoward)
- 长期 Vim 用户感到庆幸:持久化撤销是日常功能,从未想过它会在 Neovim 里出问题。(较多人)
- 反直觉的是,Microsoft Word 反而成了尊重向后兼容的正面例子。(少数人)
- 连为开发者辩护的人也承认,以不兼容方式改动现有文件本应避免;这是原文作者愤怒的真正来源。(较多人)
认为 Neovim 只是选择了另一种关怀方式,无关对错
- Neovim 优化的是更贴近现代用户期望的那种关怀,而不是 Vim 式的保守;这不是更好或更坏,只是不同。同样可以写一篇文章说 Vim 没有原生 LSP 和自动补全,是对用户不负责。(较多人) > 意译:Neovim 有另一套关怀用户的方式,更贴近现代期望,不是更好或更坏,只是不同。(@dlisboa)
认为 Vim 的问题恰恰是向后兼容太多
- 对“肌肉记忆”的过度尊崇扼杀了创新,Vim 因此慢慢滑向边缘;作者教过的上百名学生几乎没人愿意学它。现代编辑器环境里,Vim 缺乏精心设计的默认配置,又要靠一堆快捷键冲突的插件,难以竞争。(较多人) > 意译:把肌肉记忆神圣化让 Vim 停止了创新,慢慢滑向遗忘,我教过的学生几乎没人想学。(@jurf)
怀念以人为本的计算文化,批评当下软件对用户充满敌意
- 早年那批人把计算视为应当快乐的事,软件要帮助人、让人对自己创造的东西感觉良好;如今的技术文化变得敌对,不只是暗黑模式或牺牲用户需求,连谈论技术的方式都充满“不这样就会被淘汰”的阴暗叙事。(较多人) > 意译:Raskin 那代人把使用计算机当作快乐之事,现在的东西则充满敌意,连谈论技术的方式都变得阴暗。(@spamizbad)
持久化撤销本身并不讨喜,很多人主动关掉它
- 持久化撤销会在文件系统里撒满带波浪号前缀的同名文件,每个用 Vim 碰过的文件都会多出一个副本,ls 输出被噪音污染,因此关掉它是 Vim 用户最常见的配置改动之一。(较多人) > 意译:持久化撤销会让每个文件都多出一个波浪号版本,ls 输出全是噪音,所以很多人干脆禁用。(@fatbird)
- 有人调侃:现在终于明白为什么打开 Vim 不再弹交换文件消息了。(少数人)
有价值的补充
- Neovim 早期对自己的定位就是“Vim,但带破坏性变更”。(@natbennett)
- Vim 内置时间旅行:
:earlier 7d可以回到七天前的状态。(@linsomniac) - 有人把“关怀义务”的类比推得更远:现代监控行业与其“用户”的关系,更像军火商与军事目标的关系。(@mindslight)
- 讨论中有人指出,原文作者在谈持久化撤销时扯上平台“给白人至上主义者提供舞台”之类的指控,这种夹带无关立场的做法令人反感。(@philipallstar)