写代码最爽的瞬间,莫过于在键盘上运指如飞;而写代码最让人安心的防线,绝对是那颗包治百病的“后悔药”——Ctrl + Z(撤销,Undo)。不管你把代码改得多烂,只要疯狂按下 Ctrl + Z,时光就能倒流,一切都能当作没发生。
但如果有一天,你按了一下 Ctrl + Z,系统不仅没有帮你改错,反而反手把你刚刚辛辛苦苦写满代码、还没来得及保存的新文件直接扔进了垃圾桶,甚至连个弹窗提示都没有,你会不会当场破防?
轻量级现代编辑器界的高铁 Zed 最近就出了这么一个让人惊出一身冷汗的“删库跑路”级 Bug。好在官方及时打上了补丁,在 新版本 中把这台不讲武德的“文件粉碎机”给勒令停业了。今天咱们就用大白话聊聊,这到底是怎么一回事。
🧐 案发现场:吃人的 Undo 与 Redo
在聊这个 Bug 之前,咱们先科普两个大家天天用、但可能没深思过的概念:
- Undo(撤销):时光倒流。你新建了一个文件,点击“撤销”,在编辑器的逻辑里,就是“反向执行新建”,也就是把文件删掉。
- Redo(重做,Ctrl+Y / Ctrl+Shift+Z):时光再次前进。你刚用 Undo 撤销了某件事,后悔了,用 Redo 就能把刚刚撤销的操作再执行一遍。
比如,我现在新建了一个file.md文件
然后你就使用Ctrl+Z undo了它,他就会逻辑消失在当前的项目面板力。
然后你使用后悔药ctrl shift +Z,让他起死回生。继续在里面新增了写东西,但是此时你的内容还没被保存
在旧版的 Zed 里,如果你在项目面板(Project Panel)新建了一个文件,写了几百行惊世骇俗的代码,但还没来得及按 Ctrl + S 保存(代码还处于内存的暂存区,也就是俗称的 Dirty File 脏文件)。
这时候,如果你不小心触发了项目面板的 Undo:
- Zed 就会很老实地去执行“反向新建”——把这个文件直接塞进系统垃圾桶。
- 最恐怖的来了:因为它在内存里的改动还没落盘,一旦文件被扔进垃圾桶,内存里的缓存直接被清空。此时你就算吓得赶紧按 Redo 想把文件变回来,变回来的也只是一个空壳文件,你那几百行高贵的代码早就灰飞烟灭了!如果你此时顺手关了 Zed,那这辈子都别想找回这段代码了。
这哪里是 Undo,这分明是合法刺客!
🥊 横向对比:VS Code 和 IDEA 怎么吃后悔药的?
既然聊到文件管理和撤销的安全性,咱们不妨看看隔壁两位老大哥是怎么防呆的:
1. VS Code(小心翼翼的“碎嘴子”)
VS Code 在文件树里甚至不怎么允许你用纯快捷键随意 Undo 掉一个文件的创建。如果你想删除或撤销大变动,VS Code 那万年不变的顶部提示框绝对会雷打不动地弹出来问你:“你确定吗?”虽然有时候显得有点唠叨,但确实稳如老狗,绝不会让你的未保存代码轻易暴毙。
2. IntelliJ IDEA(拥有“时间机器”的巨无霸)
在这块,IDEA 简直是满分满级的存在。它内置了一个极其强悍的功能叫 Local History(本地历史记录)。在 IDEA 里,哪怕你把文件删了、垃圾桶倒了、甚至整个目录都弄丢了,你右键点击项目选择 Local History,它就像开挂一样,能把过去几天内你在内存里改过的每一行代码、每一个微小的光标跳动都给你还原出来。用 IDEA,你根本不需要担心 Undo 会丢失数据。
3. Zed(吃一堑长一智的“精神小伙”)
以前的 Zed 追求极致的快,有时候快到连提示框都懒得弹,结果就闹出了这种“Ctrl+Z 删未保存文件”的惨剧。不过通过这次 PR 的重构,Zed 把项目面板和撤销管理器的弹窗逻辑完美合并,不仅补上了这个致命的逻辑漏洞,而且弹窗刷新依然是零延迟、丝滑无比。它在保持轻量高性能的同时,终于变得让人安心了。
💡 总结
这次更新可以说是把全天下 Zed 用户的代码资产从悬崖边上捞了回来。好工具的最高境界,不是平时有多炫酷,而是在你不小心犯蠢、手抖按错键的时候,它能死死抱住你的大腿说:“主子,三思啊!”
各位用 Zed 的极客朋友们,赶紧把编辑器更新到最新版本,这下终于可以放心大胆地按 Ctrl + Z 了!