VS Code太臃肿?我决定自己写个编辑器
Fine, I'll build my own text editor

受够了如今软件越来越臃肿的现状,我决定动手写一个属于自己的文本编辑器。我首先尝试在 Canvas 上渲染,虽然实现了 60-120 帧的流畅动画,但缺乏原生交互且完全不可访问。随后我转向 contenteditable 方案,虽然获得了原生选中和撤销功能,却遭遇了性能瓶颈。最终,简单的 textarea 配合 MicroLighter 成了最佳选择,性能远超预期。虽然目前只实现了 90% 的外观,但功能仅占 1%,不过至少我避开了从零构建的泥潭。
看起来像是 90% 的文本编辑器,但只实现了 1% 的功能。
HN 评论区
251- tzs
大概在 1980 到 1981 年间,我还是个本科生,在加州理工学院高能物理系做兼职的系统编程/管理工作。
Rob Pike 在我之前担任过这个职位,当时他是高能物理系的研究生,后来他离开去了贝尔实验室。
有一天,我和另一个学生 Karl Heuer 都在干程序员们常干的事:抱怨当时的屏幕编辑器,并声称我们能写出更好的东西。
不知怎么的,这变成了一场竞赛。我们俩通宵达旦地互相较劲,编写各自的编辑器。整个过程几乎只有敲键盘的声音,偶尔会有人宣布某个新功能搞定了,希望能以此扰乱对方的心神。
第二天早上,另一位学生系统管理员 Norman Wilson 来了,看到了 Karl 和我在忙什么。
Norman 在邮件里把这事告诉了 Rob Pike。他的回复大致是这样的:
> 每个人都会写个屏幕编辑器。这很容易,也能让他们觉得自己很重要。告诉他们去干点有用的事吧。
没过一两年,Rob Pike 自己也写了个屏幕编辑器。我好奇这是否让他觉得自己很重要?:-)
- akersten
是啊,谁能想到,专门为这种用例设计、且内置于浏览器中长达三十年的 <textarea> 元素,竟然是实现可编辑文本性能最好、行为最一致的方式。
不过我有点难过,作者在那里并没有完全剔除不必要的复杂性……我们其实还没在构建真正的文本编辑器,我们只是在做一个带花哨输入框的网站。如果我们真想构建一个正经的文本编辑器,就必须避开浏览器这种臃肿的东西。
- kqp
在我看来,短期内大家都在喊“别优化那段代码”,中期大家耸耸肩说“换台新电脑”,而长期来看,大家都会逐渐迁移到那些优化过代码的解决方案上。
我认为主流关于性能优化的叙事完全是错的。低效不是一个常数,它是一个百分比。你看着比你的软件快 10 倍的东西,心想你的软件 20 年后也能跑得那么快,确实如此,但到那时,对方的软件已经快 100 倍了,差距反而更大了。大家都在利用那些速度做各种事情,而你要么停留在 20 年前,依然慢得像狗,要么在两者之间摇摆,要么直接放弃了。你的软件依然很烂,而且如果你再等,这还会再次发生,永无止境。
认为优化随着时间推移变得不那么重要的想法,是短视的。
当然,优化并非万能。其他因素也很重要,语境很重要,过度投入是可能的,如果你的高管能强制大家使用,那优化也无所谓,我们中许多人确实只规划未来两年等等。
- pmkary
文本编辑器就像机械表或钢笔。它们的机械结构本身就充满了美感。对我来说,几乎没有其他模块在制作过程中能带来如此满足感。每次我发现一个新的(像这样的好编辑器),看到那些绳索般的逻辑、渲染机制、工字钢般的布局计算……感觉就像收到了一份圣诞礼物。
- Isofarro
作者走的这条路,最终通向的正是 VS Code。
这让我强烈地想起 Marjin Haverbeke 在 2011 年 Full Frontal 大会上的演讲:https://ffconf.org/talks/respectable-code-editing-in-the-bro... —— 先是用 Canvas,然后是用 contenteditable,最后是用 DOM。
Haverbeke 后来创建了 CodeMirror 和 ProseMirror。
- holgerschurig
行吧,我干这事已经几十年了。
我用一个名为“Emacs”的编辑器构建套件来打造我自己的编辑器、IDE、git 前端、组织工具和 Wiki,还有很多其他东西。
IDE 集成了 LSP、rustix 以及许多其他与程序员相关的模式和增强功能,比如 tree-sitter。Git 前端用的是 magit。组织工具用的是 Org-Mode。Wiki 用的是 denote。
- stillpointlab
我刚刚让 Fable 给我写了一个文本编辑器。好吧,老实说,我是让它封装了 KDE 的 KTextEditor 库,这已经相当于 90% 的文本编辑器了。
我之前用的是 Kate,这是 LLM 建议的 Fedora 上最接近 Sublime Text 的东西。但即使是 Kate,虽然很棒,也还是太臃肿了。
所以我让 Fable 把文本编辑器部分(KTextEditor)提取出来,用 Rust 封装,并配上 LSP 服务器。花了大约两天时间,我得到了一个小巧、超快的小编辑器。我用 Sway 管理标签页,用 fuzzel 代替模糊文件搜索,用 broot 代替资源管理器视图。我已经添加了 Markdown 预览支持。我可能还会加上一些基础的 git 集成。
然后我又让它把这个小编辑器变成了一个笔记界面,我把它绑定到了 Mod-m 快捷键上,用来在 ~/Notes 里记笔记。
我们生活在一个狂野的时代。希望大家趁还能利用的时候好好利用。
- dang
近期相关讨论:
They don't make 'em like Sublime Text anymore - https://news.ycombinator.com/item?id=49209354 - 2026 年 8 月(13 条评论)