fred: A text editor that uses C for everything - Handmade Network Expo 2026

Lobsters Hottest 工具

摘要

Cameron Damera 在 Handmade Network Expo 2026 上演示了完全用 C 编写的文本编辑器 Fred,其核心特性包括内置 TCC 编译器、实时插件系统、动态 Tree-sitter 语言支持、撤销树和会话恢复,所有代码均手工编写,不依赖 AI。

<p><a href="https://lobste.rs/s/nszzsn/fred_text_editor_uses_c_for_everything">Comments</a></p>
查看原文
查看缓存全文

缓存时间: 2026/07/14 04:16

### TL;DR Cameron Damera 在 2026 年 Handmade Network 博览会上演示了他的文本编辑器 **Fred**——一个完全用 C 从头构建、自带嵌入式 C 编译器、速度极快且高度可定制的编辑器。新增了主题系统、相对行号、会话恢复和利用 TCC 实现的无缝 Tree-sitter 语言支持。 --- ## 关于演讲者与 Fred 的起源 我叫 Cameron Damera(发音像“day camera”),在 Discord 上是 Starfree Clone,也有人直接叫我 Fred。我从 2023 年开始开发这个编辑器,白天是编译器开发者,晚上和做新手爸爸的间隙写 Fred。 Fred 名字大致代表“友好编辑器”(Friendly Editor)。它的核心支柱是: - **原生**:所有平台层(Windows / Linux)都是自己写的,不依赖任何第三方库。 - **快速**:由于完全控制事件流转、线程和内存布局,启动和操作都极快。 - **高度可定制**:所有配置(颜色、空白显示、行号等)完全由数据驱动。 - **可扩展**:内置 TCC(小型 C 编译器),允许用 C 编写插件,并直接在编辑器地址空间中编译运行。 - **手工打造**:不包含任何 AI 生成的代码,未来也绝不会引入。 --- ## 演示:启动速度与基础操作 在 2021 年的普通笔记本上,Fred 启动几乎是瞬间的。与记事本对比,后者明显更慢。 打开 Fred 后,按 `F1` 调出命令面板,可模糊搜索任何功能(如打开配置、文件浏览器)。文件浏览器支持“锚定”模式,扁平显示当前目录所有文件并支持模糊搜索,同时启用“查找全部”小部件。例如搜索 `#include`,首次需扫描文件系统(稍慢),之后每次都在约 300 毫秒内完成,可在 937 个文件中定位结果。 标签可随意拖拽、停靠,形成灵活的面板系统。 --- ## 定制功能 ### 行号与相对行号 可以切换显示行号,新增了**相对行号**(用户高频需求)。开启后,光标所在行显示为 0,上下行分别显示与当前行的差值,对移动操作非常有用。 ### 主题系统 新增了主题支持。内置四个主题:Fred、Solarized Light、Solarized Dark 以及受 ForCoder 启发的主题。切换后可复制颜色值并自行修改。未来会增加更多主题。 ### 颜色与配置 可实时修改背景色等参数,所有修改立即生效。 --- ## 撤销树:基于不可变缓冲区的版本管理 Fred 使用**不可变缓冲区**实现撤销历史。当用户做出编辑后,撤销并非线性,而是形成一棵树。例如输入“Hello world”,然后改为“My name is Fred”,再撤销至“Hello world”,接着改成“My name is Cameron”——传统的撤销会丢失“Fred”那个状态。 Fred 用 `Ctrl+Shift+Z` 调出类似 Git Diff 的可视化树状 UI。您可以浏览节点间的差异(如同查看 diff),并轻松回到任意历史节点,包括“Fred”。所有历史在会话中保留。 --- ## 插件系统与 Live Coding Fred 内嵌了 TCC(Tiny C Compiler),插件就是普通的 `.c` 文件,编译后直接成为编辑器可执行代码。 ### 多光标对齐插件 Fred 的多光标是一等公民。演示中,用户有多个光标在行尾,想对齐多余空格。Discord 社区贡献的插件 `align_multicursors_with_spaces` 一键搞定。其源码只有几十行 C 代码,在 Fred 内部编译运行。 ### 现场创建简易插件 命令面板中所有蓝色项代表自定义插件,旁边有垃圾桶图标可删除。演示者快速编写了一个切换 C 风格注释的插件,保存后重新编译并绑定按键,即可使用。 ### 绑定与使用 复制函数名,在配置中粘贴到入口位置,即可将插件关联到命令面板或快捷键。 --- ## 会话恢复 关闭 Fred 再重新打开,它会**瞬间恢复**之前的编辑位置,包括完整的撤销树(序列化快到几乎无感)。所有历史编辑点都保留。 --- ## 利用 TCC 实现动态 Tree-sitter 语言支持 Tree-sitter 本身是 C 语言编写的解析器。通常编辑器需要预编译 DLL 或单独编译。Fred 利用内置的 TCC,让您直接从 Tree-sitter 的源码(如 `tree-sitter-rust` 仓库)加载解析器和高亮规则,无需任何外部构建步骤。 ### 操作步骤 1. 将 `tree-sitter-rust` 的目录放入 Fred 的配置路径。 2. 在配置中添加一行,指向该目录。 3. 保存配置后,Fred 会自动编译并启用 Rust 语法高亮。 4. 可与 `.rs` 文件扩展名关联,优先级会覆盖内置的语言(如可强制用不同的解析器处理 C++ 文件)。 5. 重新打开文件,高亮持久生效。 这一功能使 Fred 能够支持 Tree-sitter 定义的所有语言,无需预编译插件。 --- ## 总结与展望 Fred 是一个极简但强大的 C 文本编辑器。本次 Expo 独享的发布包括: - 主题系统 - 相对行号 - 会话恢复 - 基于 TCC 的动态 Tree-sitter 语言支持 - 插件系统(已有社区贡献) 所有代码手工编写,无 AI。未来计划增加更多主题并继续优化插件生态。 --- **Source** [fred: A text editor that uses C for everything - Handmade Network Expo 2026](https://www.youtube.com/watch?v=xz5aPCRxsv4)

相似文章

@sailfishcc1: 太优雅了

X AI KOLs Timeline

该文章讨论了一种方法,使Markdown编辑器能够同时具备Typora风格的即时预览、Notion风格的块拖拽、YAML结构化属性编辑器,编辑时只对源码进行最小修改,并严格遵守Markdown标准。