




























了解了设计思路之后,实际用起来并不复杂。以下是从零开始的三个步骤。
安装: 非 Emacs 用户可以用一行脚本自动安装(会自动安装 Emacs、clone 仓库、启动守护进程、注册 MCP 服务):
curl -fsSL https://raw.githubusercontent.com/zawatton/anvil.el/master/install.sh | bash
Emacs 用户可以用包管理器安装,比如 straight.el:
(straight-use-package '(anvil :type git :host github :repo "zawatton/anvil.el" :branch "v0.4.1"))
配置并启动: Anvil 的模块分默认和可选两类。默认模块在 anvil-enable 时自动加载,可选模块需要手动指定:
(require 'anvil) (setq anvil-modules '(worker eval org file host git proc fs emacs text clipboard data net)) (setq anvil-optional-modules '(xlsx pdf ide browser http orchestrator cron elisp )) (anvil-enable) (anvil-server-start)
默认模块覆盖了日常场景:worker(后台任务派发)、eval(Elisp 求值)、org(org 操作)、file(文件操作)、git(git 查询)、host(系统信息)等。不需要的功能直接从列表里去掉就行,比如你不用 git 就可以把 git 删掉,Anvil 就不会注册相关的 MCP 工具。
Spacemacs 配置: 如果你用 Spacemacs,可以把 Anvil 放到某个 layer 里管理。比如在 my-misc layer 的 packages.el 中:
(setq my-misc-packages '( (anvil :location (recipe :fetcher github :repo "zawatton/anvil.el" :branch "v0.4.1")) )) (defun my-misc/init-anvil () (use-package anvil :config (setq anvil-optional-modules '(ide http)) (server-start) (anvil-enable) (anvil-server-start)))
有一个坑需要注意:Spacemacs 用 recipe 方式安装包时,编译后的 .el 文件和 .sh 脚本可能不在同一个目录,导致 M-x anvil-server-install 报"Cannot find anvil-stdio.sh"。解决办法是手动复制桥接脚本:
cp /path/to/anvil.el/anvil-stdio.sh ~/.emacs.d/anvil-stdio.sh chmod +x ~/.emacs.d/anvil-stdio.sh
连接 Claude Code: Anvil 通过一个 shell 脚本(~anvil-stdio.sh~)作为 MCP 桥接。先在 Emacs 里运行 M-x anvil-server-install 安装桥接脚本,然后在终端注册两个 MCP 服务:
claude mcp add -s user -t stdio anvil -- \ ~/.emacs.d/anvil-stdio.sh \ --server-id=anvil \ --init-function=anvil-enable \ --stop-function=anvil-disable claude mcp add -s user -t stdio anvil-emacs-eval -- \ ~/.emacs.d/anvil-stdio.sh \ --server-id=emacs-eval
为什么是两个?因为 Anvil 内部用两个 server-id 分别管理不同类别的工具( anvil 管 eval/IDE, emacs-eval 管文件/org/buffer/worker)。注册两个入口就能让 Claude Code 看到全部 198+ 个工具。
之后正常使用 Claude Code 就行——Claude 会自动在需要时调用 Anvil 的工具,不需要手动触发。
使用示例: 假设你有一个 3000 行的 =todo.org=,想用 Claude Code 把某个标题下的所有 TODO 项标记为 DONE,并移到归档位置。
没有 Anvil 时,Claude Code 的流程是:先用 Read 工具读取整个 3000 行文件(消耗几千 token),找到目标标题,修改状态,再用 Edit 工具写回去(又几千 token)。如果想同时移动子树到另一个位置,还要再来一轮读写。
有了 Anvil,Claude Code 的对话会变成这样:
你:把 todo.org 里"Q1 任务"下面的 TODO 项全部标记为 DONE,然后 refiling 到"归档"标题下。 Claude:我来处理。 [调用 anvil-org-read-headline] ;; 只读"Q1 任务"子树,约 80 行,而不是整个 3000 行 [调用 anvil-file-batch] ;; 一次性把所有 TODO → DONE + 执行 refiling 完成。"Q1 任务"下 12 个 TODO 项已全部标记为 DONE 并 refiling 到"归档"标题下。
整个过程只传了目标子树的内容和变更指令,没有读写整个文件。传统方式可能消耗 6000-8000 token(读 + 写各一轮),Anvil 方式大约 500-800 token——省了将近 90%。
再比如批量重命名。没有 Anvil 时,Claude Code 要先 grep 找到所有包含旧名字的文件,然后逐个 Read、Edit、写回,几十个文件就是几十轮往返。有了 Anvil,一条 anvil-file-replace-string 或 emacs-eval 调用就能在 Emacs 侧一次性完成——作者实测在 7 个仓库 39 个文件里把 zawatton21 改为 =zawatton=,只花了一次往返。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。