乐于分享
好东西不私藏

AI时代,全世界都在换IDE,我反向升级回了40年的编辑器

AI时代,全世界都在换IDE,我反向升级回了40年的编辑器
01 一个不合时宜的决定

2024年底,AI编程工具井喷。Cursor用户破千万,Windsurf横空出世,Zed用Rust重写了编辑器的未来,连GitHub Copilot都开始免费。

所有人都在换IDE。

而我做了一个看起来完全反直觉的决定:把日常开发全部搬回Emacs。

不是尝鲜,不是怀旧,是认真的。到现在用了大半年,配合Claude Code,效率比之前用任何AI IDE都高。

我知道这听起来很像某种技术原教旨主义的宣言。但请耐心看完,我想解释的不是"Emacs比XX好",而是一个更本质的问题:

AI时代,编辑器到底应该是什么?

02 编辑器的"智能"贬值了

先说一个可能有点扎心的观察:

当Claude、GPT-4这些模型能直接理解整个代码仓库、生成完整功能模块的时候,编辑器自带的"智能"——代码补全、语法检查、重构建议——突然就不那么值钱了。

你品品:

  • 代码补全?AI写的比你补全的还完整
  • 语法检查?AI直接告诉你哪错了、怎么改
  • 重构建议?问一句,方案给你列三个
  • 文档生成?把代码丢过去,README都给你写好

那编辑器还剩下什么?

我的答案是两件事:操控感可感知性

操控感是:你能多快、多精准地操作你的代码和工作流。可感知性是:AI能多大程度地理解你的当前状态。

这两件事,恰好是Emacs最擅长的事。

03 Claude Code + Emacs:当AI有了眼睛

这是我选择Emacs最核心的原因,也是别的IDE很难做到的事。

Server-mode:AI能"看见"一切

Emacs有一个叫server-mode的功能,开启后可以通过emacsclient命令从外部访问Emacs内部的任何状态。

这意味着什么?

意味着Claude Code——一个跑在终端里的AI编程助手——可以直接读取Emacs里所有buffer的内容。

*Messages*里的报错信息?直接读。任何打开的文件内容?直接读。Lisp求值的结果?直接读。

你不需要截图、不需要复制粘贴、不需要切换窗口。

举个真实的场景:

我在折腾Emacs配置的时候,eval-after-load报了个错。在传统工作流里,我得:

  1. 看到报错信息
  2. 复制报错文本
  3. 切到AI对话框
  4. 粘贴、描述上下文
  5. 等回复
  6. 切回去改代码

在Emacs + Claude Code的工作流里:

  1. Claude Code自己读到*Messages*里的报错
  2. 直接分析原因
  3. 直接改好文件

步骤从6步变1步。而且AI获取的信息是完整的、精确的,不存在"我忘了贴哪段"的问题。

你在其他IDE里很难做到这件事

Cursor也好,Copilot也好,AI插件能感知的范围是有限的。它能看到当前文件,能拿到LSP的诊断信息,但它看不到你的终端输出、看不到你的build日志、看不到那些没有API暴露的内部状态。

而Emacs不一样。Emacs本身就是一个Lisp运行时,所有状态都是first-class的。Buffer、Window、Process、Hook——一切都是可以被查询和操纵的对象。

AI + Emacs,本质上是给AI接上了一个完整的操作系统级API。

04 不需要离开编辑器

第二个大优势:Emacs本身就是一个集成环境,不需要在外部工具之间跳来跳去。

我的日常开发:

  • Magit管Git——commit、rebase、diff,全键盘操作,体验比任何GUI Git工具都好
  • Dired管文件——浏览、创建、复制、删除,j/k导航,比Finder快
  • vterm跑终端——Claude Code、shell命令,全在Emacs窗口里
  • Consult搜索——ripgrep + mdfind,项目中任何内容瞬间定位

所有东西都在Emacs里。Cmd+hjkl窗口间丝滑切换,全程不需要鼠标。

这有什么了不起的?

上下文切换是效率最大的杀手。 每次从编辑器切到终端,再切到浏览器,再切回来,你的大脑都在重新加载。当所有工具都在同一个环境里,你的注意力就不会被打断。

AI时代更是如此。你和AI的协作是一个连续的对话过程——改代码、看效果、调参数、再改。如果这个循环中每一步都要切换窗口,那个流畅感就碎了。

05 多工作区:同时和多个AI对话

我的配置里有一个细节:Cmd+1打开主Claude Code,Cmd+2打开"tom"工作区,Cmd+3打开"jerry"工作区。

这不仅仅是个快捷键。它代表了一种工作方式:

我可以同时在不同的git worktree里,让不同的Claude Code实例处理不同的任务。一个在修bug,一个在写新功能,一个在做代码审查。

三个AI同时干活,我只需要在窗口间切换查看进度。mode-line上用🦀🐱的图标显示哪个工作区是活跃的,一眼就知道状态。

这种多实例并行的工作方式,在单体IDE里很难实现。但在Emacs里,不过就是多开几个vterm buffer的事。

06 中文开发者的隐藏福利

这个小功能看起来不起眼,但用过就回不去:

Emacs可以检测当前buffer的类型,自动切换输入法。

进入Claude Code的终端 → 自动切到中文输入法,因为我要用中文和AI对话。

回到代码buffer → 自动切回英文,因为我要写代码。

进入Magit写commit message → 英文。

进入Org Mode写文档 → 中文。

你不需要手动切换。Emacs知道你接下来要干什么,帮你把输入法切好了。

这个小细节每天给我省下的时间可能只有几秒钟,但它消除了一个持续的心理摩擦。你不会意识到它有多好,直到你用回了没有这个功能的编辑器。

07 改完立刻生效:AI的反馈循环

Emacs配置有一个很优雅的特性:保存即重载。

我的init.el里配了一个hook,任何.el文件保存后自动eval。这意味着:

Claude Code帮我改了一段Emacs配置 → 文件保存 → 立刻生效。

不需要重启,不需要手动加载。改完就是好了。

结合Magit的diff视图,我可以立刻看到AI改了什么。结合*Messages*buffer,如果改出错了,Claude Code立刻就能读到报错,马上修复。

这个反馈循环快到什么程度?快到你感觉AI在"实时"帮你调代码。

08 40年的编辑器,为什么在AI时代反而更强了

最后说说更宏观的视角。

Emacs诞生于1976年,快50年了。在这50年里,无数编辑器来了又走——Sublime Text、Atom、VS Code(虽然还活着,但也在不断被挑战)、现在又来了Cursor、Windsurf、Zed。

Emacs为什么没死?

因为它从来不是一个"编辑器",而是一个平台

它的核心设计哲学是:不要给我一个成品,给我一个我能改造一切的引擎。

Lisp是它的底层语言,一切皆可定制。Buffer、Window、Process、Keymap、Hook——所有编辑器的概念都是暴露出来的、可以被修改的。

这正好是AI时代最需要的东西。

AI需要的不只是一个能编辑文本的窗口,而是一个它可以深度感知和操控的环境。Emacs给了它这个能力:

  • 通过emacsclient读取所有buffer状态
  • 通过eval执行任意Emacs Lisp代码
  • 通过vterm与终端进程交互
  • 通过文件系统操作任何文件

Emacs不是一个编辑器,它是AI的操作系统。

09 写给还在观望的人

我不是要劝所有人都用Emacs。Emacs的学习曲线确实陡峭,配置确实折腾,生态确实不如VS Code丰富。

但我想提供一个不同的视角:

当所有人都在追逐"下一个AI IDE"的时候,也许值得想一想——你需要的到底是一个内置了AI的编辑器,还是一个AI能深度接入的环境?

前者,每出一个新的AI工具,你就得换一个IDE。后者,AI工具随便换,你的环境始终是那个环境。

工具会过时,但好的架构不会。

这就是我在AI时代选择Emacs的原因。不是因为它最新、最好看、最有AI功能,而是因为它最开放、最灵活、最能让AI成为我工作流的一部分,而不是反过来。


如果你也在用Emacs + AI编程,欢迎交流。如果没用过但感兴趣,可以从Claude Code开始——它是我用过最好的AI编程助手,没有之一。