外观
Emacs 社区日报 2026-10-18
约 5005 字大约 17 分钟
2026-10-18
自动整理自 Telegram 讨论组,每天更新。内容为 AI 摘要,仅作信息索引与回顾。
Emacs 中文讨论组
🎯 核心热点与专题探讨
【专题】Emacs 生态在 AI 时代的选择:坚守、分化与妥协
围绕 magit 不接受 AI 代码的事件,群内展开了一场关于 Emacs 社区未来走向的激烈讨论。话题横跨开源维护者的商业困境、AI 辅助编码对传统插件生态的冲击,以及 Emacs 作为“文本操作系统”在终端与 GUI 之间的生存定位。
维护者的生存压力与社区反弹:有成员指出 magit 作者(tarsius)长期依赖赞助维持温饱,拒收 AI 代码虽可理解,但在 AI 时代“有点危险”。群友认为,如果他人用 Rust/Go 复刻一个功能替代品(如 magit-fast),Emacs 核心阵地可能被快速侵蚀。不过 magit-fast 作者澄清,其代码是“半自动写的”,可读性良好,“不是什么意大利面代码”,一定程度上回应了对 AI 代码质量的疑虑。
Emacs 的使用场景分化:一位群友表示“现在开 emacs 的机会越来越少了”,因为 rust LSP 内存占用太高,转而用 Emacs 做 RSS、邮件、Telega 听音乐等轻量文本操作,并认为“在 emacs 都是文本,不会卡的”。但也有人指出自己的 i5-8250u 机器“跑不动 telega”,引发关于 telega 资源开销的争议。
关于“Esc 代替 Meta”的考古式讨论:有群友提出“esc代替meta键的玩法是不是已经被抛弃了?”,反映出新一代用户对历史配置习惯的疏离与探索。
emacs-conf 的缺席与 roadmap:当被问到“今年不参加 emacs-conf”时,一位成员回应“不参加,明年再考虑。我想先把 browser 做出来。”这显示出 Emacs 开发者更倾向于先用产品说话,而非活跃于社区活动。
🔑 关键概念与技术解析
- magit / magit-fast:magit 是 Emacs 最著名的 Git 操作界面。magit-fast 则是社区成员为了应对 magit 作者不接受 AI 代码而开发的高性能替代品,目标是解决传统 magit 在大仓库上的性能瓶颈。
- telega / etaf:telega 是 Emacs 上的 Telegram 客户端,功能全面但配置较复杂。etaf 是新的同类项目,主打“开箱即用”和 GUI 风格界面,设置选项直接呈现在页面内,降低了配置门槛。
- jj / video.el:jj 是一种新型分布式版本控制工具,支持静态追踪与更友好的命令行操作。video.el 只是一个 Emacs 包的名字,并非视频功能,群友因此产生了误解。
- ediff:Emacs 内置的交互式 diff 工具。有群友分享将其结果保存为带语法高亮的 src-block 博客文章的方法,见 https://blog.prayhand13013.top/20261018T185247--emacs-%E4%BF%9D%E5%AD%98ediff%E7%BB%93%E6%9E%9C%E4%B8%BA%E5%B8%A6%E5%AD%97%E7%AC%A6%E7%BA%A7%E9%AB%98%E4%BA%AE%E7%9A%84src-block__blog.html
- M-g r / which-key-mode:M-g r 是 Emacs 中“跳转至最新消息”的快捷键,本质上是将所有消息标记为已读。which-key-mode 是辅助记忆快捷键的 minor-mode,在按下前缀键后弹出可用键提示。
- sglang / vllm / safetensors:这些是本地大模型推理时常用的高性能运行时/框架。sglang 和 vllm 可直接对着 safetensors 运行,无需转换格式,降低了部署复杂度。
- ONNX:一种跨平台模型交换格式。有群友提议将 qwen 转成 ONNX,以便“一个 exe 一个模型文件”直接运行,避开 Python 环境依赖的麻烦。
💎 碎片知识与金句拾遗
- “magit-fast 是我半自动写的,因为我不怎么会 lisp 代码就让 ai 帮我生成了一个函数,你去看看代码也可以看到代码可读性还是很好的,不是什么意大利面代码”——AI 辅助代码的辩护与质量讨论。
- “现在开 emacs 的机会越来越少了,甚至不想开起来看代码,因为 rust lsp 占内存太他妈的多了”——对 LSP 资源消耗的真实吐槽。
- “直接用 etaf 吧,类似 GUI 的界面,不用自己配置,设置选项本身也在页面里面,开箱即用”——开源项目如何靠“零配置”吸引用户。
- “我之前不小心直接整退群了,leave chat 和我理解的不太一样”——Telegram 群组成员对“退群”机制的幽默自嘲。
- “大确实大但我觉得挺简单的(我 podman 拉一个 sglang 然后去 modelscope git clone 一个模型就跑起来了)”——本地大模型部署的另一种路径,使用容器化技术简化环境管理。
- “Windows 原生环境下,py 依赖部署起来比 node 还恶心”——对 Python 生态配置繁琐的吐槽。
- “个人电脑本地没有部署大模型的必要,不如直接调 api”——关于本地模型投入产出比的务实判断。
- “做了一下 majutsu 的 video.el 支持”——展示如何为 Emacs 包增加视频支持。
- “我永远记不住 M-g 这个入口,严格说 which key 也帮不上我”——快捷键记忆难题的另一种解法:“每次用的时候查就好了,查个几次自然就记住了”。
- “不会渲染所有,只渲染视口里面的”——解决 Anki 3000 张卡片渲染卡顿的关键思路。
🛠️ 值得深入研究的点 (Follow-up)
- magit-fast 项目:群友分享的 magit 高性能替代品,值得关注其代码质量与性能优化思路(https://github.com/... ),尤其是 AI 辅助生成代码的可维护性问题。
- etaf 的 isearch 支持:etaf 新增的 isearch 支持,表明该项目持续迭代,可作为 telega 的现代替代方案进行研究。
- ONNX 模型转换 + 单文件部署:有群友探索将 qwen 等模型转为 ONNX,再通过“一个 exe + 一个模型文件”的形式在 Windows 上运行,这个方向值得跟进,可能会简化本地模型部署的复杂度。
- Anki 视口渲染优化:群友遇到的 3000 张卡片渲染卡顿问题,解决方案是只渲染视口内的卡片,并按需加载。这属于前端虚拟化渲染(virtualized rendering)的典型场景,值得进一步研究如何在 Emacs 或 Web 环境中高效实现。
观点延伸
当天最值得咀嚼的,不是“AI 代码能不能进入 magit”,而是软件项目该把维护责任划在哪里。AI 只是把原本隐形的成本放大了:代码可以更快出现,但理解、审查、解释和长期修改并不会自动消失。真正的分歧不是人工对 AI,而是谁愿意承担这些成本。
1. “披露 AI”不是质量标准,最多只是来源记录
magit 要求 PR 说明是否使用 AI,背后有维护者的生计压力,也有对不可理解代码的防御。可披露并不等于可维护,拒收也不等于项目安全。magit-fast 的出现恰好说明,严格边界会催生替代实现;而替代实现能否取代原项目,最终仍要看测试覆盖、提交粒度、命名结构、性能数据,以及作者能否解释关键取舍。
因此,AI 辅助代码应接受一套与来源无关的工程审查:行为是否可验证,改动是否容易定位,后来者能否在不依赖生成模型的情况下继续维护。回答不了这些问题的代码,即使今天运行正常,也只是把债务推给下一位维护者。
2. Emacs 的竞争力不只是“什么都能做”,而是意图到结果的距离
群里有人因为 Rust LSP 的资源消耗减少用 Emacs 看代码,却继续用它读 RSS、邮件、Telegram 和音乐;也有人因为 telega 的性能或配置门槛几乎无法使用。这里暴露出的不是单一插件好坏,而是 Emacs 的默认体验正在分化:熟悉内部逻辑的人觉得轻快,新用户却可能先撞上配置、性能和快捷键记忆问题。
etaf 的开箱即用、跳到最新消息的路径、Anki 只渲染视口内容,以及“先把 browser 做出来再参加会议”,都指向同一个判断:工具的价值不在功能数量,而在于降低启动、定位和恢复的成本。Emacs 若想扩大边界,需要把“可组合”进一步变成“可直接进入状态”。
3. 本地模型争论,本质上是工作流成本争论
Podman 加推理框架可以让熟悉环境的人快速启动,但 Windows 原生依赖、多个目录、配置文件和 Python 环境,又会让同一件事变得难以复现。于是“本地部署还是直接调 API”不应先争理念,而应比较首启时间、升级风险、磁盘占用、故障恢复和持续维护成本。用户需要的不是一个模型文件,而是一条不会在下次更新后突然失效的路径。
可继续研究 / 实践: 选一个 Emacs 功能,分别做人工实现、AI 辅助实现和整合包实现,记录首启时间、内存、配置步骤、测试覆盖、故障恢复和修改行为所需的理解成本。把结果写成可复核的对照表,讨论就能从“信不信 AI”转向更有用的问题:这套工具究竟降低了谁的成本,又把哪种成本转移给了谁。
Emacs 轻聊讨论组
🎯 核心热点与专题探讨
专题一:ETAF 框架与 Anki 开发路线之争
群内围绕 ETAF(Emacs 的 TUI/文本渲染框架,推测为一种基于 Emacs 的通用应用开发框架)展开了一场关于 Anki 客户端 开发方案的深度讨论。参与讨论的有 ETAF 核心开发者、日常用户和 AI 辅助开发者,核心争论点集中在以下技术路线选择上:
- 是否依赖 Anki 本体运行:有成员提出想通过
anki-connect接口接入 Anki,但吐槽“开着 ETAF 还要挂着本体尿袋真不爽”,希望做独立运行的 ETAF 原生 Anki 客户端。核心开发者geekinney回应:ETAF 本身具备 CSS/JS/HTML 类似的概念,可以直接做一个原生 ETAF app,不需要依赖原始 HTML/CSS/JS 引擎。 - Anki 同步难题:讨论中提到 Anki 官方同步功能需要一个 Rust 后端(Anki 官方开源了 Rust 引擎),如果要做独立客户端,必须考虑与 AnkiWeb/AnkiMobile/Android 同步的兼容性问题。有成员提出了一个架构图:前端全部原生 ETAF(deck/browser/editor/review),后端复用 Anki 的 Rust sidecar(collection/scheduler/FSRS/AnkiWeb/媒体/导入导出)。
- 协作开发模式:讨论了非官方包的维护模式——是否加入 ETAF 组织、如何协调 PR 冲突、AI 时代 Git 协作机制是否落后等。有人提出“只 git add 不 commit”的激进方案,被反驳后有人推荐使用 jj(Jujutsu)作为 Git 的现代化替代。
- AI 辅助开发实践:有成员尝试用 Claude/DeepSeek 了解 ETAF 架构,被核心开发者纠正“这个回答有点蠢,它估计都没看 etaf 的代码”。随后分享了一个
etaf-app-dev技能包链接,用于帮助 AI 更好地理解 ETAF 开发范式。
专题二:宿舍生存指南——噪音、借钱与人情世故
这段对话从一位成员吐槽室友深夜敲键盘声音太大开始,逐步延展到宿舍关系、借钱的社交伦理等话题。虽然偏生活化,但群内大佬们分享了不少经验:
- 关于噪音应对:有人推荐耳塞、有人建议换宿舍,更有激进者提出“干他”和“不好相处才是比较好的”的观点。有人分享了自己大学时因宿舍打牌床板塌掉、直接退宿的经历。
- 关于借钱:讨论核心集中在“借钱借急不借穷”“不能借小钱,要借大金额方便写欠条”“关系好的反而不好意思借钱”等社交准则。有人分享了被同学借 1500 元多年不还的经历,多次讨要无果后直接删好友。
- 关于人情:有人提到“人情得看是谁的人情”,老板借了钱不求还,变成人情往来,最后以“后面生小孩还要钱”推回来。
🔑 关键概念与技术解析
- ETAF:一个基于 Emacs 的应用开发框架(推测为 Text User Interface 框架),支持通过文本渲染构建应用界面,内部有类似 CSS/HTML/JS 的概念,但全部转为 ETAF 格式在 buffer 里渲染,目标是替代传统 Web 前端技术栈。
- adaptive-wrap-prefix-mode:Emacs 中的一个 minor mode,用于在
visual-line-mode(软换行)下自动调整换行后的前缀缩进。群内讨论发现它在 telega(Emacs 的 Telegram 客户端)的 link preview 中会导致换行后竖线缺失的问题。 - anki-connect:Anki 浏览器插件提供的 HTTP API,允许外部程序通过本地端口与 Anki 交互。但依赖 Anki 本体保持运行,是 ETAF Anki 客户端“独立运行”方案的主要障碍。
- jj (Jujutsu):一个现代化的版本控制系统,设计为 Git 的替代/补充,支持更简洁的 commit 管理、自动 amend 等能力,被认为更适合 AI 时代的快速迭代开发节奏。
- miryoku:一种基于键盘布局的 QMK 配置方案(推测为一种热层/双手分区布局),群内有成员自称“用了两三年了”。
- FSRS:Anki 官方的现代间隔重复调度算法(Free Spaced Repetition Scheduler),被提及为 ETAF Anki 后端可复用的组件。
- 丁达尔效应:光线穿过云层间隙形成光束的物理现象,在泸沽湖讨论中被提到,并非技术名词。
💎 碎片知识与金句拾遗
- “不好相处才是比较好的” —— 宿舍关系哲学:如果宿舍里都是正常人,才适合好好对待;如果有一堆十三点,尽早切割反而对自己好。
- “借钱借急不借穷” —— 借钱社交法则:穷的可能跑路或撕破脸,急用的钱反而是合理的借款理由。
- “谈交情的都想占你便宜,觉得你好欺负” —— 对“交情”的冷峻审视。
- “AI 时代,git 的那一套机制太落后了,跟不上开发速度,协作是个大问题” —— 对传统 Git 协作流程在 AI 辅助开发下的反思,衍生出“只 git add 不 commit”和 jj 替代方案。
- “仓库只做 git add,不做 git commit就好了” —— 激进提议,被反驳“不 commit 没法版本控制,搞坏了历史就丢了”,随后有人接话“来用 jj”。
- “自从有了 etaf,我能做的事儿就好多了” —— ETAF 用户对其扩展能力的认可。
- “deepseek告诉我anki界面是css/js/html渲染的” —— 群成员尝试用 AI 了解 Anki 技术栈,但被核心开发者纠正其理解有误,说明 AI 在没有项目代码背景时会给出“看起来合理但实际错误”的答案。
- “不需要理解太多,直接一句话给 AI 搞就好了” —— ETAF 核心开发者建议:借助自定义技能包(etaf-app-dev)让 AI 直接写应用,降低学习门槛。
🛠️ 值得深入研究的点 (Follow-up)
- etaf-anki 项目:群内已有人着手开发 ETAF 原生 Anki 客户端,核心路线是“前端原生 ETAF + 后端复用 Anki Rust sidecar”,需解决同步、媒体、调度等兼容问题。这是一个极具潜力的开源项目,有望替代官方 Anki 桌面端。
- etaf-app-dev 技能包:核心开发者分享了一个
etaf-app-dev技能包(Forgejo 链接),用于引导 AI 正确编写 ETAF 应用。这是一个值得关注的新范式——用“技能包”约束 AI 行为来加速框架生态开发。 - jj (Jujutsu):群内多人推荐使用 jj 替代 git commit 流程,理由是更适合 AI 协作的高频迭代开发模式。值得持续关注其与现有 CI/CD 工具的兼容性。
- ETAF 浏览器计划:核心开发者确认
etaf-browser一直在推进,目标是处理原始 CSS/HTML/JS 并转为 ETAF buffer 渲染。这会极大拓展 ETAF 的适用场景。
观点延伸
中心判断:ETAF-Anki 真正要解决的不是“能不能做出一个界面”,而是“能不能在不牺牲生态兼容性的前提下,重新定义客户端边界”。 群里从“开着 ETAF 还要挂着本体”出发,最后落到 Rust 后端、同步、卡片模板和跨平台运行,这个转折很关键:独立运行有两种含义,一种是进程上不依赖 Anki 本体,另一种是数据和行为上仍然兼容 Anki 生态。前者可以靠 ETAF 原生界面实现,后者才决定项目能否长期可用。
1. 独立客户端的最小闭环,不应从页面开始
群里已经纠正了“Anki 界面就是 HTML/CSS/JS,所以要等 etaf-browser”的误解。ETAF 可以直接承担 deck、browser、editor、review 等交互,浏览器计划并不是前置条件。真正的边界在于:卡片数据、模板语义、媒体文件、调度算法和同步协议是否被正确保留。
因此,第一版最值得做的不是把所有页面仿出来,而是定义一个可验证的兼容性切片:能否打开既有 collection,能否完成一次复习,FSRS 结果是否一致,媒体是否可追踪,导入导出后数据是否不丢失。至于 AnkiWeb 同步,可以先明确为独立的后端能力,而不是把它模糊地藏在“前端做完就行”的叙事里。界面可以很快被 AI 搓出来,兼容性却必须靠测试和样本积累。
2. AI 时代缺的不是提交按钮,而是上下文边界
“AI 给出的回答没看 ETAF 代码”暴露的不是某个模型偶尔犯错,而是通用模型会自动把陌生框架套进熟悉的 Web 经验。技能包的价值也不只是让 AI 少问几句,而是把框架的真实抽象、反例、代码入口和验证方式打包成可执行上下文。
同样,“只 git add、不 git commit”混淆了两个问题:高频生成需要保留大量中间状态,团队协作又需要可回溯、可审查的变更边界。jj 可能更适合管理前者,但它不会自动解决后者。真正适合 AI 协作的单位,应是“可验证变更”:每次修改都有明确目标、最小范围、测试证据和可撤销路径,而不是按模型的一轮输出或一次提交来划分。
可继续研究/实践
可以把 etaf-anki 做成一组逐步扩大的兼容性实验:先用真实卡片样本验证本地打开、编辑、复习和媒体,再对照 Anki 的调度结果,最后单独评估同步。与此同时,把 etaf-app-dev 类技能继续结构化为“代码地图、禁止假设、最小示例、验收命令”四部分。这样得到的不是一个会生成界面的 AI,而是一条能持续产出、能被审查、也能在失败后回滚的应用开发流水线。
