外观
Emacs 社区日报 2026-07-08
约 5202 字大约 17 分钟
2026-07-08
自动整理自 Telegram 讨论组,每天更新。内容为 AI 摘要,仅作信息索引与回顾。
Emacs 中文讨论组
🎯 核心热点与专题探讨
今日群内讨论热度最高的主要有两个方向:Jujutsu (jj) 版本控制系统的体验与生态,以及 Emacs LSP (尤其是Eglot) 的性能优化与配置维护。
专题一:Jujutsu (jj) 版本的 Emacs 体验与依赖问题
群友围绕新晋版本控制系统 Jujutsu (jj) 及其 Emacs 前端 majutsu 展开了深入讨论。
各方观点与痛点:
- 初体验与推荐: 有群友直接表示“好用”,并分享了
majutsu项目地址(见拾遗)。另有群友推荐了相关博客文章,探讨 jj 在 AI 时代的优势。 - 核心痛点:对 Magit 的强依赖。 讨论核心聚焦于
majutsu这个 Emacs 前端。有群友表示 “有办法不依赖magit吗,感觉magit有点重了”,认为如果使用 jj 是为了替代 git,那安装一个依赖 Magit 的插件显得有些反直觉和臃肿。 - 技术分析: 用户
@fuzy****:****matrix.org等人深入分析了代码,指出majutsu不仅依赖magit-section、transient等 Magit 子库,还直接调用了 Magit 核心提供的magit-diff,magit-process等函数和 face,目前 “看来是不能直接去掉 magit 依赖”。群友尝试提出替代方案,如“inherit 相应的 face”,但发现代码中直接调用了user option,使得解耦难度更大。 - 大 Diff 场景: 有群友询问 jj 对于“很大的 commit diff”的支持,得到的回答是“很大的 commit diff 肯定还是在终端看快,在 emacs 里可能快不起来”。
总结: Jujutsu 作为新工具引发了关注,但 Emacs 生态的成熟度(尤其是摆脱 Magit 路径依赖)成为阻碍部分用户实际采用的症结。majutsu 项目的作者在设计上选择了复用 Magit 现有 UI 组件和 face,是以快速实现功能为主要目标的权衡。
专题二:Emacs LSP 性能优化与配置技巧
群聊中反复出现了对 Eglot 和 JDTLS (Java LSP) 的性能抱怨与解决方案。
典型痛点:
- Eglot 启动卡顿: 用户
zdn反馈 “eglot每次启动要卡我2-3秒”,并尝试手动控制 LSP 启动。 - Java JDTLS 的复杂与缓慢: 群友分享成功在 Emacs 上跑通 JDTLS 的经历,但同时指出 “Java的版本管理也太麻烦了”,并且“每次打开项目都要加载挺长时间”。有人总结 “感觉java还是得直接上idea”。
- 补全菜单显示问题: 用户
Aiser遇到 corfu 补全菜单文字被截断的问题,排查原因为 nerf-fonts-corfu 插件引起。
解决方案精选:
- Eglot 提速: 群友分享了一个“立竿见影”的配置,通过忽略 JSON-RPC 的日志来减少 I/O 开销,显著缓解了卡顿,尤其是对 Vue 项目效果明显。
(with-eval-after-load 'eglot (fset #'jsonrpc--log-event #'ignore)) - Corfu 显示修复: 用户
Aiser通过调整字体缩放因子解决了图标导致的截断问题。另有群友推荐使用(setq nerd-icons-scale-factor 0.8)kind-icon替代nerd-icons-corfu。 - Java 版本管理: 推荐使用
mise(一个通用的版本管理工具),或在项目中借助direnv/envrc设置JAVA_HOME环境变量,也有群友提到可“根据 pom.xml 自动切 jdk 版本”。
🔑 关键概念与技术解析
- Jujutsu (jj): 一个新兴的、去中心化的版本控制系统,其设计目标是简化 Git 的复杂性,提供更好的工作流支持,尤其擅长处理复杂的变更历史。其理念与 Git 不同,被部分社区认为是版本控制的未来。
- Majutsu: 一个旨在提供 Jujutsu (jj) 版本控制全套功能的 Emacs 包,本质上是 Magit 的“jj 变体”,但目前在实现上高度依赖 Magit 的代码库。
- elisp-fontify-semantically: 一个据称可以为 Elisp 代码提供语义级语法高亮的 Emacs 包。群友体验后认为“开了发现好不习惯,大概是主题没适配”。
- vibe coding: 指通过对话式 AI(如 LLM)生成代码,而非传统的手动编写。群友在讨论 LLM 拼写检查时顺带提及了这一概念。
- vertico-multiform vs vertico-buffer: 这是一个易混淆点。
vertico-multiform是一个配置框架,允许用户根据不同的 completion category 或命令动态切换不同的 Vertico 显示模式。vertico-buffer是其中一种显示模式,它将候选项列在一个独立的 buffer 中,而非 minibuffer。群友发现vertico-buffer-hide-prompt选项在 TUI (终端) 模式下失效,导致光标位置异常。
💎 碎片知识与金句拾遗
- 金句(关于 Java): “这语言真的有点难评……各种奇怪的所谓最佳实践变成约定俗成的东西”。—— 群体对 Java 复杂生态的经典吐槽。
- 金句(关于 Emacs LSP 优化): “干掉jsonrpc的log 会让lsp client明显响应好一些,不卡手。不信你们试试”—— 群友
zdn发现的“灵丹妙药”。 - 金句(关于 Emacs 依赖管理): “在 linux 上这是 gtk 主题决定的”—— 关于右键菜单样式的终极答案。
- 冷门工具/技巧:
- mise: 一个推荐用于管理 Java、Node.js 等运行时版本的现代工具。
- eglot-java: 一个可以解决跳转到 Java 标准库问题的(非官方)Eglot 扩展,它将标准库源码下载到项目目录的
.eglot-java文件中。 - e-ink (in Emacs): 有群友研究用 LLM 做拼写检查,并提到“主要是你很多数据,不适合调服务”。
- 行为艺术: 群友
Aiser在遇到 corfu 图标显示问题后的解决路径极具代表性,从更换插件 (kind-icon) 失败,到调整缩放因子成功,再到最后“关掉图标了。我一直感觉这些图标没有什么用”,体现了 Emacs 用户的实用主义精神。
🛠️ 值得深入研究的点 (Follow-up)
- Magit 的解耦与 JJ 原生 Emacs 前端:
majutsu的现状引发思考:开发一个完全独立于 Magit 的 JJ 前端是否更优?如何平衡代码复用与功能独立性? jsonrpc--log-event的性能影响: 这是一个可以深入探索的点:Eglot 的 JSON-RPC 日志机制到底造成了多大的性能开销?这为所有使用eglot的用户提供了一个立即可行的优化方向。- Emacs + LLM 的拼写检查方案: 将 LLM 用于本地文本检查(对标常见的拼写检查服务)是一个有趣且具有潜力的方向。如何平衡召回率(Recall)、准确率与资源消耗(如切片策略)是值得研究的课题。
┊ review diff a/emacs-china-2026-07-08-opinion.md → b/emacs-china-2026-07-08-opinion.md @@ -0,0 +1,41 @@ +## 🧠 Hermes GPT-5.5 观点延伸 + +### 中心判断 + +今天群聊里最有张力的话题不是"哪个工具好用",而是两个经典软件工程困境的同时上演:生态逃逸速度不足(majutsu 对 Magit 的依赖)和抽象泄漏的代价(jsonrpc log 成为性能瓶颈)。两者指向同一个问题——在成熟生态里做增量改进时,旧的抽象边界会变成新的枷锁。 + +--- + +### 一、majutsu 的 Magit 依赖不是"偷懒",是理性选择——问题在于 Emacs 缺乏版本控制前端的抽象层 + +群友从"想摆脱 Magit 的笨重"出发,发现 majutsu 深度依赖 Magit 的 magit-diff、magit-process、face 体系乃至 user option,结论是"目前无法解耦"。这个结论正确,但解读可以更深一层: + +这不是作者能力问题,是 Emacs VC 生态的结构性问题。 Magit 在过去十年里已经事实上垄断了 Emacs 的 Git UI 心智——它不仅是一个工具,更是一套非正式的"版本控制 UI 框架"。magit-section、transient、diff rendering、process buffer 管理这些能力本应沉淀为与具体 VCS 无关的抽象库,但它们一直长在 Magit 内部,没有独立的契约和文档。 + +majutsu 作者面对的选择非常现实:要么基于 Magit 现成的 UI 组件快速出活(今天群友的方案),要么从零写一套 jj 原生 UI,这意味着重做 diff 渲染、process 管理、section 折叠——工作量至少翻 5 倍,且最终体验大概率不如 Magit。在开源个人项目里,后者几乎不可行。 所以 majutsu 依赖 Magit 不是设计缺陷,是理性人在约束下的最优解。 + +真正的解不在 majutsu,而在 Magit 侧:如果有人把 magit-section + diff rendering + process 管理抽成独立库(叫 vc-ui 之类),majutsu 和其他非 Git VCS 前端才能长出独立的 Emacs 体验。 + +--- + +### 二、(fset #'jsonrpc--log-event #'ignore) 这条 one-liner 暴露了 Eglot 的一个深层假设错误 + +群友 zdn 分享了这条配置,反馈"立竿见影……尤其是 vue 这种非常明显"。这是今天最有工程价值的一条信息。 + +表面上看,这只是"关掉日志 = 减少 I/O = 变快"。但真正的问题是:为什么 JSON-RPC 的日志写入会成为用户可感知的性能瓶颈? + +JSON-RPC 是 Eglot 和 LSP server 之间的通信协议。在高频场景(Vue Language Server、rust-analyzer)下,每秒可能产生数百条 notification(diagnostics、progress、semantic tokens)。如果每条都同步写日志——即使是 append 到 buffer 或文件——累积的 I/O 延迟在 Elisp 单线程模型下会直接阻塞 UI 事件循环。这就是卡顿的来源。 + +更深层的问题是:Eglot 的设计假设"日志近乎零开销",但这个假设在 LSP 协议变得 chatty 的今天已经不成立了。 这不是一个 bug,是一个随时间老化的架构假设。上游应该考虑的修复方向不是砍日志,而是: + +1. 日志写入异步化(使用 make-process 而非同步 I/O) +2. 日志级别可配置(默认只记录 error,而非所有 event) +3. 高频事件合并(同一秒内的 diagnostics 更新只记一条) + +--- + +### 可继续研究/实践的方向 + +1. 用 benchmark 量化 jsonrpc log 的真实开销:在一个 Vue 或 Rust 项目中,对比开启/关闭 jsonrpc--log-event 前后 Eglot 的响应延迟(可以用 benchmark-run 或手动计时 completion/find-definition 操作)。如果数据明显,这就是一个值得向上游提 issue + patch 的点。 + +2. 探索 Magit UI 层的"库化"可行性:调研 magit-section 和 diff rendering 是否可以独立打包为一个不依赖 Git 的通用库。这比直接写一个 jj 原生前端更有杠杆效应——受益的不只是 majutsu,还有未来可能出现的 pijul、fossil 等 Emacs 前端。 已写入 /home/geekinney/.hermes/workspace/emacs-china-2026-07-08-opinion.md。
核心思路:抓住了当天两个最有张力的话题——majutsu 的 Magit 依赖困境(生态逃逸速度问题)和 jsonrpc log 的性能 hack(抽象泄漏导致的架构老化)——并分别给出了超越表层讨论的工程判断和可行动方向。没有编造事实,所有延伸都锚定在原始讨论的具体线索上(magit-diff 调用、user option 依赖、Vue 场景的明显卡顿等)。
Emacs 轻聊讨论组
好的,这里是根据您提供的群聊记录整理的知识库摘要。
🎯 核心热点与专题探讨
专题:密钥管理与环境配置的“格式化”之争
群内围绕“敏感信息管理”展开了激烈讨论,这是典型的技术债与安全实践的碰撞。核心痛点在于“如何优雅地管理本地开发、Emacs配置与不同项目中的密码、Token等敏感信息”。
主流方案探索:
- sops: 有成员刚从 sops 切换到主流方案,但发现切换后“AI额度使用反而减少了”,暗示了配置优化后效率提升,但并未透露具体工具名。
- pass / authinfo: 有成员认为类似 pass 的加密文件管理方式(将所有变量加密后随Git管理)是“看似离谱但非常可靠”的方法,被另一位成员直接点出就是
pass。 - Bitwarden 集成: 有成员提出了更精细的“三份分离”方案:
project env(项目环境变量)、Emacs全局ENV(非敏感信息)、敏感信息(读Bitwarden),体现了对于不同场景下配置隔离的深刻理解。 authinfo文件格式: 讨论了authinfo文件的格式,强调host,user,password应放入auth,而port等非敏感信息可放在外部,以精简和明确安全边界。
痛点与解决方案:
- “难界定”导致的混乱: 成员指出“就是因为难界定才这么改的”,反映了在项目初期,开发者对于哪些信息属于敏感信息、哪些属于全局配置的边界划分不清,导致配置方案反复修改。
- 追求“非侵入式”管理: 成员试图优化Emacs的全局环境变量加载,希望不将项目敏感信息暴露在全局shell环境中,体现了对最小权限原则的追求。
专题:世界杯观赛与技术社区的交叉杂谈
群聊中穿插了大量关于世界杯的讨论(阿根廷vs埃及、法国、英格兰等队的表现),虽然有大量闲聊,但其中穿插的裁判争议、球员状态分析、VAR判罚等,与群内“技术公平性”的讨论(如入群验证的难度、对不公平规则的吐槽)形成了微妙的呼应。例如,成员指出“感觉没有公平的竞技、剪刀石头布都能比出争议”,并讨论了“延迟判罚肯定能判对但观感太差”,这反映了技术社区成员对游戏规则(无论是体育还是软件)的同一套评价逻辑:“绝对正确”与“用户体验”之间的平衡。
🔑 关键概念与技术解析
- sops: 一种加密文件编辑器,常用于管理YAML/JSON等配置文件中的敏感数据。它不是像
pass那样管理密码本,而是直接对配置文件中的值进行加密,使其能安全地存入版本控制系统。 - pass: 一个基于Unix哲学的命令行密码管理器。它使用GPG加密每个密码为单独的文件,可以随Git仓库同步,非常受Unix/Linux核心用户青睐。本群讨论中将其作为“加密文件随Git管理”的典型代表。
- Project X / GPT-5.6 Sol: 群内提到了即将在周四(2026-07-10)发布的、名为 Project X 的GPT新模型,代号 GPT-5.6 Sol。成员预测国内可能在周五(2026-07-11)可用。这显示了技术社区对前沿AI模型发布的高度关注。
- ALPS (TLS Application-Layer Protocol Settings): 群内入群验证题目的核心。ALPS是TLS 1.3中的一个扩展,用于在TLS握手时协商应用层协议,对于HTTP/3 (QUIC) 等协议的实现至关重要。入群验证要求查找Chrome中该功能的第一个commit,显示了极高的技术门槛。
💎 碎片知识与金句拾遗
- 无价的冷门站点:
https://www.env.style/被分享,这是一个专门讨论环境变量管理痛点和最佳实践的网站,对注重配置管理的开发者来说是宝藏。 - AI辅助开发工作流技巧: 群内分享了
grill工具(可能是某个AI辅助编程的能力集)。成员纠正了“只能在一个session里用”的误解,指出:“我的理解是新功能或重构时用这个,弄完是要落于 prd/spec 的吧”。 还提到了/loop-with-me、/grill-with-docs、/to-prd等交互形式,展现了AI工具从“对话式开发”向“文档驱动开发”演进的思路。 - 对非对称公平性的吐槽: 针对世界杯VAR争议,有成员一针见血:“阿根廷有一个疑似越位的进球...正常都是需要看VAR的,但是当时就是没有看...”。 这句话虽然是在聊球,但其描述的“规则选择性地应用”现象,在技术圈(如开源贡献者审查的公平性)同样常见。
- 越南阳了也不慌: 群成员在越南旅行途中“阳了”,但非常淡定:“修養一下而已,問題不大”。 这表明随着对病毒认知的加深,“阳”在群体中已逐渐“感冒化”。
🛠️ 值得深入研究的点 (Follow-up)
- 配置管理工具的抽象层: 群内讨论的“三份分离”方案(project env vs global env vs bitwarden)是一个值得深究的模式。可以研究是否存在类似
direnv结合bitwarden-cli或gopass的命令行集成方案,以自动化环境变量的按需加载与权限控制。 - AI驱动的文档生成 (Documentation from AI Session):
grill工具链中to-prd等命令暗示了一种将AI对话中的技术决策与设计思路自动沉淀为结构化文档(如PRD/Spec)的能力。这个概念(AI Session to Doc)极具潜力,值得关注是否有成熟的开源项目或插件可以实现此功能。 - 变态入群验证的工程实现: 群内讨论的“ALPS commit + UUID + SHA512 前33bit为0”的入群验证,本质上是一个基于PoW(工作量证明)的验证机制。这种将高难度的编程题(需要逆向、搜索、爆破)作为门槛的做法,对于构建高纯度技术社群是一个有趣的思路,但其工具化和自动化(例如一个自动验证的Bot)的实现方式值得研究。
🧠 Hermes GPT-5.5 观点延伸
核心判断:AI 辅助开发的会话如果不产生结构化产物,就是一次认知浪费。grill 的 /to-prd 指向了正确方向——不是让 AI 更会聊天,而是让聊天自动长出文档。
群里关于 grill 的讨论击中了一个真实痛点:成员问"换台电脑、换个 session,还需要再对齐一下?",另一个回答"弄完是要落于 prd/spec 的吧"。这两句话之间的张力,正是当前 AI 辅助开发的根本矛盾——会话是易失的,但决策应该是持久的。
1. Session 就是新的 /tmp
传统开发中,你在脑子里想清楚,写成代码,提交到 git。AI 会话的介入把"想清楚"这一步外化成了对话——但对话本身没有 diff、没有 review、没有版本历史。就像把架构决策写在 /tmp 里,关机就没了。这不是模型能力的问题,是我们还没建立起"对话→文档"的自动管道。/to-prd 的意图是对的,但它依赖人记得去触发——而人最不可靠的就是"记得"。
2. 从"聊完再写"到"边聊边长"
/grill-with-docs 和 /loop-with-me 这两个命令名透露了一个更激进的设计思路:文档不是会话的附属品,会话是文档的草稿态。 如果 AI 能在对话中自动识别"这是一个架构决策""这是一个接口约定",并在会话结束时输出一份带标注的 ADR 或 spec 草稿,那么跨 session、跨机器、跨人的对齐成本会断崖式下降。当前的工具形态还停留在"人驱动生成",真正的突破在"会话自动沉淀"。
3. 边界模糊是同一类问题
群里另一个平行讨论——project env / global env / bitwarden 三份分离——本质也是在解决"边界模糊导致的管理混乱"。那位成员说要拆成三份,另一位说"就是因为难界定才这么改的"。两个话题同构:当一个东西既是上下文又是产物、既敏感又不敏感、既临时又持久时,怎么归档? 会话和秘钥都是"流动状态",需要的不是更聪明的工具,而是更明确的归档纪律。工具能做的是把纪律自动化。
可继续实践的方向
关注两个信号:一是类似 grill 的工具是否会出现"会话中自动标记决策点 + 结束时自动生成文档"的闭环;二是 Git 风格的会话版本管理——每次 git commit 能否附带对应 AI 会话的快照,作为 commit message 的上下文附件。后者比手写 PRD 更接近真实开发流程,也更容易被工程团队采纳。
