Fresh:把 VS Code 式体验搬进终端的现代文本编辑器

开源
编辑器
终端
Rust
LSP
AI-Agent
2026/10/22
·

阅读时间: 大约 12 分钟

Fresh:把 VS Code 式体验搬进终端的现代文本编辑器

Fresh 打开 GB 级日志 huge.log:左侧行号已到 2.1 亿级,界面保持响应

Fresh(仓库 sinelaw/fresh,官网 getfresh.dev)是一个 Rust 编写的终端文本编辑器/IDE,主张把 VS Code、Sublime 的熟悉交互(标准快捷键、鼠标、菜单、命令面板)带进终端,同时面向”驱动编码 Agent”做了专门设计。调研时版本为 v0.5.4(2026-10-20 发布),许可证 GPL-3.0,GitHub 约 9.3k stars、367 forks。本文基于官网、仓库 README、作者技术博客与官方文档一手梳理。

一、背景:终端编辑器的两极

终端编辑器长期分裂为两极:Vim/Emacs 功能极强但模式与配置学习曲线陡峭;现代图形编辑器(VS Code、Sublime)交互友好但离不开 GUI。Fresh 的切入点是”零配置、标准键位、无模式”:Ctrl+S 保存、Ctrl+C 复制、点击拖拽滚动,用过现代编辑器就会用,同时保留可选的 Vim mode。Koala 周报提到它”想把图形编辑器的便利性带到终端”,这一定位与官网自述一致。

二、核心机制:piece tree 支撑大文件

作者 Noam Lewis 在技术博客《How Fresh Loads Huge Files Fast》中公开了文本存储设计:Fresh 采用 piece tree(piece table)——这一结构源自 1970 年代 Moore/Boyer 的 77-Editor,经 Bravo、Microsoft Word 传承,VS Code 也在 2018 年改用。树节点不存正文,只存”哪个 buffer、偏移多少、长度多少”的三元组;编辑时向新 buffer 追加内容并加一个 piece,原始 buffer 永不修改,因此插入不复制已有文本。

在此之上 Fresh 加了两项改造:

  • 不可变节点(Arc引用计数):编辑产生新树版本、共享未改动子树,支撑廉价 undo/redo、无锁并发读与快照;
  • 懒加载(lazy loading):大文件不整体入内存,buffer 可卸载为”文件路径 + 字节区间”,滚动到哪里才从磁盘读哪一块,显示时零拷贝返回字节切片。

平衡二叉树缓存左子树字节数与换行数,使偏移↔行号转换为 O(log P)。超过 100MB 进入 Large File Mode:放弃行索引,按字节导航,滚动条与行号为估算值,因此”跳到第 50000 行”在超大文件里是近似而非精确。崩溃恢复每 2 秒自动保存改动块(类似 Word 1.1 的 Fast Save),500MB 文件只存几 KB 的修改块。

Review Diff 面板:左侧 Orchestrator 列出各 worktree 与 Agent,右侧按 hunk 执行 stage/unstage/discard

三、产品形态:Orchestrator、Git 评审与 Agent 协作

Orchestrator 是 Fresh 区别于普通编辑器的核心:每个任务独占一个 git worktree,自带标签页、终端与编码 Agent(官方列出 claude、codex、opencode、aider),方向键在任务间切换,其余任务继续运行;工作区可跑在本机、~/.ssh/config 里的任意主机、Kubernetes 或 dev container,远程直接在原地切 worktree。

Git 评审提供 hunk 级 stage/unstage/discard、side-by-side diff、行内评论(可导出 Markdown)、git gutter、log 查看器与 git grep,界面快捷键直接标在面板顶部。

Agent 面向的 CLI:fresh --cmd workspace list、fresh --cmd agent wait demo-2、fresh --cmd agent start codex --prompt "review this branch",任意插件能做的事也可经 fresh --cmd script run 当脚本执行;fresh --skill 教 Agent 上手,只有被允许的 Agent 拿到钥匙,会话重启后可恢复。

LSP 内置多语言配置,支持 goto definition、references、hover、code actions、rename、diagnostics、自动补全与 format-on-save,允许单语言挂多个 LSP。

四、插件体系:TypeScript + QuickJS 沙箱

需要先纠正一个口径:Koala 周报称插件”在 Deno 沙箱里运行”,但官方 README 明确写的是 TypeScript plugins (sandboxed QuickJS)——运行时是 QuickJS 而非 Deno。插件包分四类:plugins、themes、language packs、bundles;内置包管理器可从 registry 安装、也可直接填 git 仓库 URL(monorepo 用 fragment 指定子目录);随附 TODO Highlighter、Git Grep、Git Find File、Diff Chunk Navigation 等内置插件。新插件推荐用 registerHandler() 注册命令以获得类型安全。官方文档同时维护”QuickJS Migration”开发者笔记,说明运行时仍在演进。

Settings UI:所有选项带描述与默认值,/ 搜索,插件与语言包同处管理

五、关键数据与口径

项目官方口径(2026-10-22 调研)
版本 / 许可证v0.5.4(2026-10-20)/ GPL-3.0
实现语言Rust(crates/);插件 TypeScript 经 QuickJS 沙箱
GitHub约 9.3k stars、367 forks、376 个 open issues(API 实时)
平台Linux(musl 静态通用包 x86_64/aarch64,免 root 自更新)、macOS、Windows、FreeBSD;另有 Fresh Desktop 应用
安装curl 一键脚本、brew、winget、deb/rpm、AUR、Flatpak/AppImage、npm/npx、cargo、Nix flake
大文件阈值>100MB 切 Large File Mode(字节导航、估算行号)
遥测仅版本、OS/架构、TERM 类型,启动一次 + 每日一次,不含文件内容与行为;--no-upgrade-check 关闭

官方自己承认的实现缺口(作者博客原文):当前实现每次编辑重建整棵树而非路径复制,使编辑为 O(P) 而非设计上的 O(log P),作者明确称”这是实现缺口,不是设计固有问题”。此外 piece tree 的已知代价是额外间接寻址、多次编辑后 buffer 碎片、文本缓存局部性较差,piece 数量会随编辑增长(可定期合并缓解)。

六、适用与不适用

适合:

  • 长期 SSH 远程工作、希望在终端里获得菜单/命令面板/鼠标体验的开发者;
  • 同时驱动多个编码 Agent、需要按 worktree 隔离任务并并排评审 diff 的人;
  • 需要打开超大日志/转储文件且保持滚动响应的运维与排障场景;
  • 厌恶 dotfile 配置、想要开箱即用设置 UI 的用户。

不适用:

  • 深耕 Vim/Emacs 数十年、依赖庞大定制插件生态的核心用户(迁移惯性大,Koala 点评亦指出生态是长线挑战);
  • 追求精确行号跳转的超大文件场景(Large File Mode 行号为估算);
  • 想闭源商用衍生插件/产品的团队(GPL-3.0 有 copyleft 约束);
  • 期待成熟插件市场的用户(registry 刚起步,内置插件数量有限)。

七、客观分析:优势与局限

优势:

  1. 交互零学习成本:标准键位 + 鼠标 + 菜单 + 命令面板,正面降低终端编辑器门槛;
  2. 大文件机制扎实:piece tree + 懒加载 + 零拷贝 + 结构 diff,且作者把数据结构选型与权衡公开写成长文,工程透明度高;
  3. Agent 原生:worktree 隔离、可恢复会话、Agent CLI 与 skill 教学,踩在编码 Agent 工作流的趋势点上;
  4. 分发周到:静态通用包免 root 自更新,覆盖 Linux 各发行版、macOS、Windows、FreeBSD 与 npm。

局限:

  1. 成熟度仍处 0.x:376 个 open issues,插件生态与第三方集成远小于 Vim/Emacs/Neovim;
  2. 编辑复杂度未达标称结构:当前 O(P) 重建树,路径复制的理论优势尚未完全落地;
  3. GPL-3.0 对二次分发有限制,与 MIT/Apache 系工具混用需注意;
  4. 遥测默认开启(虽内容匿名且可关),隐私敏感者需手动加 flag。

八、谁该关注

把终端当主力、又厌倦记忆命令的开发者可以一键安装试用;做多 Agent 并行开发的团队值得评估 Orchestrator 的 worktree 隔离模型;关注文本编辑器数据结构的工程师,作者那篇 piece tree 长文本身就是优质材料。但把它作为全尺寸主力编辑器替代 Neovim/VS Code,目前仍需等待生态与版本成熟。

参考来源