Claude Code IDE for Emacs:将AI助手融入你的Emacs工作流
引言
作为一名开发者,你是否曾经想过让AI助手直接融入你日常使用的编辑器中?Emacs作为一款历史悠久且功能强大的编辑器,如今通过Claude Code IDE扩展了与AI助手Claude的集成能力。这篇文章将详细介绍Claude Code IDE for Emacs,帮助你了解如何将这个强大的AI助手直接集成到你的Emacs工作流中。
Claude Code IDE for Emacs不仅仅是一个简单的终端包装器,它创建了一个双向桥接,让Claude能够理解并利用Emacs的强大功能——从LSP和项目管理到自定义Elisp函数。这种深度集成使Claude成为一个真正了解Emacs的AI助手,能够在你的现有工作流程中工作,并与你的整个Emacs生态系统交互。
功能概述
Claude Code IDE for Emacs提供了许多令人印象深刻的功能,让AI助手与你的开发环境无缝协作。以下是主要功能特点:
自动项目检测和会话管理
当你在一个项目中工作时,Claude Code IDE能够自动检测你的项目环境,并为每个项目创建独立的会话。这意味着你可以在不同的项目之间切换,而不会混淆上下文。每个项目都有自己的Claude缓冲区,命名格式为*claude-code[project-name]*
。
终端集成
Claude Code IDE支持完整的终端集成,包括全彩支持。你可以使用vterm
或eat
作为终端后端,两者都提供了出色的终端功能。这意味着你可以在Emacs内部直接与Claude交互,无需切换到外部终端。
MCP协议实现
通过模型上下文协议(MCP),Claude Code IDE实现了真正的IDE集成。这不仅是一个简单的命令行界面,而是一个完整的集成环境,让Claude能够理解你的代码上下文并提供更有针对性的帮助。
工具支持
Claude Code IDE提供了丰富的工具支持,包括文件操作、编辑器状态和 workspace 信息。这些工具让Claude能够执行各种任务,如代码分析、文件操作等。
诊断集成
对于代码质量,Claude Code IDE与Flycheck和Flymake等诊断工具集成,能够直接访问和利用代码中的错误、警告等信息,提供更准确的代码建议。
高级差异视图
借助ediff集成,Claude Code IDE提供了高级差异视图功能,让你能够直观地查看代码变更,并与Claude协作进行代码审查和改进。
标签栏支持
如果你使用标签栏功能,Claude Code IDE提供了适当的上下文切换支持,确保在不同标签之间切换时保持正确的上下文。
选择和缓冲区跟踪
Claude Code IDE能够跟踪你的选择和缓冲区状态,提供更好的上下文感知能力,让Claude更准确地理解你当前的工作焦点。
安装指南
先决条件
在安装Claude Code IDE之前,确保你的系统满足以下要求:
-
Emacs 28.1或更高版本 -
Claude Code CLI已安装并在PATH中可用 -
vterm
或eat
包(用于终端支持)
安装Claude Code CLI
首先,你需要安装Claude Code CLI。请按照[[https://docs.anthropic.com/en/docs/claude-code][Claude Code文档]]中的安装说明进行操作。
安装Emacs包
Claude Code IDE目前处于早期开发阶段。你可以使用use-package
和straight.el
来安装它:
(use-package claude-code-ide
:straight (:type git :host github :repo "manzaltu/claude-code-ide.el")
:bind ("C-c C-'" . claude-code-ide-menu) ; 设置你喜欢的键绑定
:config
(claude-code-ide-emacs-tools-setup)) ; 可选:启用Emacs MCP工具
这个配置将安装Claude Code IDE包,并设置一个快捷键来访问菜单界面。最后一行是可选的,用于启用内置的Emacs MCP工具。
使用指南
基本命令
与Claude Code IDE交互的最简单方式是通过瞬态菜单界面,它提供了对所有可用命令的直观访问。只需运行M-x claude-code-ide-menu
即可打开交互式菜单。
以下是常用命令及其功能:
命令 | 描述 |
---|---|
M-x claude-code-ide-menu |
打开包含所有Claude Code命令的瞬态菜单 |
M-x claude-code-ide-emacs-tools-setup |
设置内置MCP工具(如xref、project) |
M-x claude-code-ide |
为当前项目启动Claude Code |
M-x claude-code-ide-send-prompt |
从 minibuffer 输入向Claude发送提示 |
M-x claude-code-ide-continue |
在目录中继续最近的对话 |
M-x claude-code-ide-resume |
使用之前的对话恢复Claude Code |
M-x claude-code-ide-stop |
停止当前项目的Claude Code |
M-x claude-code-ide-switch-to-buffer |
切换到项目的Claude缓冲区 |
M-x claude-code-ide-list-sessions |
列出所有活动的Claude Code会话并切换 |
M-x claude-code-ide-check-status |
检查Claude Code CLI是否安装并正常工作 |
M-x claude-code-ide-insert-at-mentioned |
将选中的文本发送到Claude提示 |
M-x claude-code-ide-send-escape |
向Claude终端发送escape键 |
M-x claude-code-ide-insert-newline |
在Claude提示中插入换行符(发送\ + Enter) |
M-x claude-code-ide-toggle |
切换Claude Code窗口的可见性 |
M-x claude-code-ide-show-debug |
显示包含WebSocket消息的调试缓冲区 |
M-x claude-code-ide-clear-debug |
清除调试缓冲区 |
多项目支持
Claude Code IDE使用Emacs内置的project.el
自动检测你的项目。每个项目都有自己的Claude Code实例,具有唯一的缓冲区名称,如*claude-code[project-name]*
。
你可以同时为不同的项目运行多个Claude Code实例。使用claude-code-ide-list-sessions
查看所有活动会话并在它们之间切换。
窗口管理
-
当已经有一个活动会话时运行 claude-code-ide
将切换窗口可见性 -
可以使用标准的Emacs窗口命令(如 C-x 0
)关闭窗口而不会停止Claude
配置详解
Claude Code IDE提供了丰富的配置选项,让你可以根据自己的需求定制体验。以下是主要的配置变量及其用途:
基本配置变量
变量 | 描述 | 默认值 |
---|---|---|
claude-code-ide-cli-path |
Claude Code CLI的路径 | "claude" |
claude-code-ide-buffer-name-function |
缓冲区命名函数 | claude-code-ide--default-buffer-name |
claude-code-ide-cli-debug |
启用CLI调试模式(-d标志) | nil |
claude-code-ide-cli-extra-flags |
额外的CLI标志(如”–model”) | "" |
claude-code-ide-debug |
启用调试日志 | nil |
claude-code-ide-terminal-backend |
终端后端(vterm或eat) | 'vterm |
claude-code-ide-log-with-context |
在日志消息中包含会话上下文 | t |
claude-code-ide-debug-buffer |
调试输出的缓冲区名称 | "*claude-code-ide-debug*" |
claude-code-ide-use-side-window |
使用侧边窗口而非常规缓冲区 | t |
claude-code-ide-window-side |
Claude窗口的位置 | 'right |
claude-code-ide-window-width |
侧边窗口的宽度(左/右) | 90 |
claude-code-ide-window-height |
侧边窗口的高度(上/下) | 20 |
claude-code-ide-focus-on-open |
打开时聚焦Claude窗口 | t |
claude-code-ide-focus-claude-after-ediff |
打开ediff后聚焦Claude窗口 | t |
claude-code-ide-show-claude-window-in-ediff |
在ediff期间显示Claude窗口 | t |
claude-code-ide-system-prompt |
要追加的自定义系统提示 | nil |
claude-code-ide-enable-mcp-server |
启用MCP工具服务器 | nil |
claude-code-ide-mcp-server-port |
MCP工具服务器端口 | nil (自动选择) |
claude-code-ide-mcp-server-tools |
暴露的Emacs函数列表 | nil |
claude-code-ide-diagnostics-backend |
诊断后端(auto/flycheck/flymake) | 'auto |
claude-code-ide-prevent-reflow-glitch |
防止终端重排故障(bug #1422) | t |
侧边窗口配置
默认情况下,Claude Code缓冲区在侧边窗口中打开。你可以自定义放置位置:
;; 在左侧打开Claude
(setq claude-code-ide-window-side 'left)
;; 在底部打开Claude并设置自定义高度
(setq claude-code-ide-window-side 'bottom
claude-code-ide-window-height 30)
;; 在右侧打开Claude并设置自定义宽度
(setq claude-code-ide-window-side 'right
claude-code-ide-window-width 100)
;; 不自动聚焦Claude窗口
(setq claude-code-ide-focus-on-open nil)
;; 打开diff时保持对ediff控制窗口的聚焦
(setq claude-code-ide-focus-claude-after-ediff nil)
;; 在ediff期间隐藏Claude窗口以获得更多屏幕空间
(setq claude-code-ide-show-claude-window-in-ediff nil)
或者,如果你更喜欢使用常规窗口:
;; 使用常规窗口而非侧边窗口
(setq claude-code-ide-use-side-window nil)
终端后端配置
Claude Code IDE支持vterm
和eat
作为终端后端。默认使用vterm
,但如果需要,可以切换到eat
:
;; 使用eat而非vterm
(setq claude-code-ide-terminal-backend 'eat)
;; 或切换回vterm(默认)
(setq claude-code-ide-terminal-backend 'vterm)
eat
后端是一个纯Elisp终端模拟器,在某些vterm
编译有问题的工作环境中可能效果更好。两个后端都提供完整的终端功能,包括颜色支持和特殊键处理。
终端键绑定
Claude Code IDE为终端添加了自定义键绑定,以便更轻松地交互:
键绑定 | 命令 | 描述 |
---|---|---|
M-RET |
claude-code-ide-insert-newline |
在提示中插入换行符 |
C-<escape> |
claude-code-ide-send-escape |
向Claude发送escape键取消操作 |
这些键绑定会自动为vterm 和eat 后端设置,并且仅适用于Claude Code终端缓冲区。 |
终端重排故障预防(临时)
Claude Code IDE包含一个已知的Claude Code bug([[https://github.com/anthropics/claude-code/issues/1422][#1422]])的临时解决方法,该bug在窗口调整大小时终端重排可能导致不可控的滚动。此解决方法默认启用,但如果需要可以禁用:
;; 禁用终端重排故障预防(不推荐,直到bug被修复)
(setq claude-code-ide-prevent-reflow-glitch nil)
一旦上游bug被修复,此解决方法将被移除。
诊断配置
Claude Code IDE支持Flycheck和Flymake进行代码诊断。默认情况下,它会自动检测哪个处于活动状态:
;; 让Claude Code自动检测活动的诊断后端
(setq claude-code-ide-diagnostics-backend 'auto) ; 默认
;; 或强制使用特定后端
(setq claude-code-ide-diagnostics-backend 'flycheck)
(setq claude-code-ide-diagnostics-backend 'flymake)
自定义缓冲区命名
你可以自定义Claude Code缓冲区的命名方式:
(setq claude-code-ide-buffer-name-function
(lambda (directory)
(if directory
(format "*Claude:%s*" (file-name-nondirectory (directory-file-name directory)))
"*Claude:Global*")))
自定义CLI标志
你可以向Claude Code CLI传递额外的标志:
;; 使用特定模型
(setq claude-code-ide-cli-extra-flags "--model opus")
;; 传递多个标志
(setq claude-code-ide-cli-extra-flags "--model opus --no-cache")
;; 标志会添加到所有Claude Code会话
注意:这些标志会在任何内置标志(如-d
(调试)或-r
(恢复))之后添加到Claude命令。
自定义系统提示
你可以向Claude的默认提示追加自定义系统提示,允许你为特定项目或上下文自定义Claude的行为:
;; 设置自定义系统提示
(setq claude-code-ide-system-prompt "You are an expert in Elisp and Emacs development.")
;; 或使用dir-locals.el按项目配置
// 在.dir-locals.el中:
((nil . ((claude-code-ide-system-prompt . "Focus on functional programming patterns and avoid mutations."))))
// 通过瞬态菜单设置:M-x claude-code-ide-menu → Configuration → Set system prompt
设置后,这会将--append-system-prompt
标志添加到Claude命令。设置为nil
以禁用(默认)。
调试
Claude CLI调试模式
要为Claude Code CLI启用调试模式(传递-d
标志):
(setq claude-code-ide-cli-debug t)
Emacs调试日志
要在Emacs内启用调试日志(记录WebSocket消息和JSON-RPC通信):
(setq claude-code-ide-debug t)
然后使用以下命令查看调试日志:
-
M-x claude-code-ide-show-debug
– 显示调试缓冲区 -
M-x claude-code-ide-clear-debug
– 清除调试缓冲区
调试缓冲区显示: -
WebSocket连接事件 -
所有JSON-RPC消息(请求/响应) -
错误消息和诊断信息 -
带有会话上下文的一般调试信息
高级功能
在一个项目上运行多个Claude Code实例
使用git worktree是在同一项目的不同分支上运行多个Claude Code实例的推荐方式。这允许你并行开发功能或修复错误:
# 为功能分支创建新的worktree
git worktree add ../myproject-worktree feature-branch
// 在主项目中启动Claude Code
find-file /path/to/myproject
M-x claude-code-ide
// 在worktree中启动另一个Claude Code实例
find-file /path/to/myproject-worktree
M-x claude-code-ide
每个worktree都被project.el
视为独立项目,允许你有独立的Claude Code会话及其自己的缓冲区(例如,*claude-code[myproject]*
和*claude-code[myproject-worktree]*
)。
Emacs MCP工具
Claude Code IDE包含内置的MCP工具,将Emacs功能暴露给Claude, enabling强大的代码导航和分析能力:
内置工具
-
xref-find-references
– 在整个项目中查找符号的所有引用 -
xref-find-apropos
– 在整个项目中查找匹配模式的符号 -
treesit-info
– 获取tree-sitter语法树信息,用于深度代码结构分析 -
imenu-list-symbols
– 使用imenu列出文件中的所有符号(函数、类、变量等) -
project-info
– 获取有关当前项目的信息(目录、文件等)
启用MCP工具
要启用这些工具,请添加到你的配置中:
// 设置内置的Emacs工具
(claude-code-ide-emacs-tools-setup)
一旦启用,Claude可以使用这些工具来导航你的代码库。例如:
-
“查找函数foo的定义” -
“显示此变量使用的所有位置” -
“光标下的AST节点类型是什么?” -
“分析整个文件的解析树” -
“列出此文件中的所有函数和变量” -
“这个项目中有多少文件?”
创建自定义MCP工具
你可以通过MCP工具系统将你自己的Emacs函数暴露给Claude。这允许Claude与专门的Emacs功能、自定义命令或领域特定功能交互。
工具定义格式
claude-code-ide-mcp-server-tools
中的每个工具定义遵循以下格式:
'(function-name
:description "Claude可读的人类描述"
:parameters ((:name "param1"
:type "string"
:required t
:description "此参数的作用")
(:name "param2"
:type "number"
:required nil
:description "可选参数")))
上下文感知工具示例
(defun my-project-grep (pattern)
"在当前会话的项目中搜索PATTERN。"
(claude-code-ide-mcp-server-with-session-context nil
;; 这会在会话的项目目录中执行
(let* ((project-dir default-directory)
(results (shell-command-to-string
(format "rg -n '%s' %s" pattern project-dir))))
results)))
(add-to-list 'claude-code-ide-mcp-server-tools
'(my-project-grep
:description "在项目文件中搜索模式"
:parameters ((:name "pattern"
:type "string"
:required t
:description "要搜索的模式"))))
实用技巧
会话恢复
Claude Code IDE支持会话恢复功能。当你需要继续之前的对话时,可以使用--resume
标志。这对于长时间的项目工作特别有用,可以保持上下文连续性。
自动文本提及
当你选择文本时,Claude Code IDE可以自动在Claude对话中提及和引用选定的文本。这有助于更精确地指出你想要讨论的代码部分。
诊断集成
利用与Flycheck和Flymake的集成,Claude Code IDE可以直接访问和利用代码中的错误、警告等信息。这使Claude能够提供更准确的代码建议和修复方案。
高级差异视图
借助ediff集成,Claude Code IDE提供了高级差异视图功能,让你能够直观地查看代码变更,并与Claude协作进行代码审查和改进。
常见问题解答
如何检查Claude Code CLI是否正确安装?
你可以使用M-x claude-code-ide-check-status
命令来检查Claude Code CLI是否已安装并正常工作。这个命令会验证CLI的可用性并报告任何问题。
我可以为不同的项目使用不同的配置吗?
是的,你可以使用Emacs的目录本地变量功能为不同项目设置不同的配置。例如,你可以在项目的.dir-locals.el
文件中设置项目特定的系统提示:
((nil . ((claude-code-ide-system-prompt . "Focus on functional programming patterns and avoid mutations."))))
如何调试Claude Code IDE的问题?
如果遇到问题,你可以启用调试日志来诊断问题:
(setq claude-code-ide-debug t)
然后使用M-x claude-code-ide-show-debug
查看调试信息。调试缓冲区包含WebSocket连接事件、JSON-RPC消息和错误信息,有助于识别问题。
我可以使用哪些终端后端?
Claude Code IDE支持vterm
和eat
作为终端后端。默认使用vterm
,但你可以切换到eat
:
(setq claude-code-ide-terminal-backend 'eat)
eat
是一个纯Elisp终端模拟器,在某些环境中可能比vterm
工作得更好。
如何自定义Claude Code窗口的位置和大小?
你可以通过以下配置变量自定义Claude Code窗口的位置和大小:
;; 设置窗口位置(左侧、右侧、顶部或底部)
(setq claude-code-ide-window-side 'left)
;; 设置窗口宽度(对于左侧/右侧位置)
(setq claude-code-ide-window-width 100)
;; 设置窗口高度(对于顶部/底部位置)
(setq claude-code-ide-window-height 30)
我可以同时运行多个Claude Code实例吗?
是的,你可以同时为不同的项目运行多个Claude Code实例。每个项目都有自己的Claude缓冲区,命名格式为*claude-code[project-name]*
。你还可以使用git worktree在同一项目的不同分支上运行多个实例。
如何让Claude能够使用Emacs的代码分析功能?
你可以启用内置的MCP工具,让Claude能够使用Emacs的代码分析功能:
(claude-code-ide-emacs-tools-setup)
这会启用如xref-find-references
、treesit-info
等工具,让Claude能够执行代码导航和分析任务。
如何自定义Claude的行为?
你可以通过设置自定义系统提示来定制Claude的行为:
(setq claude-code-ide-system-prompt "You are an expert in Elisp and Emacs development.")
这会让Claude以特定的角色和行为模式回应你的请求。
我可以创建自己的MCP工具吗?
是的,你可以创建自己的MCP工具,将Emacs函数暴露给Claude。每个工具定义包括函数名、描述和参数列表。你可以参考文档中的示例来创建自己的工具。
如何解决终端重排导致的滚动问题?
Claude Code IDE包含一个已知的Claude Code bug的临时解决方法,该bug在窗口调整大小时可能导致不可控的滚动。此解决方法默认启用,但如果需要可以禁用:
(setq claude-code-ide-prevent-reflow-glitch nil)
一旦上游bug被修复,此解决方法将被移除。
结论
Claude Code IDE for Emacs为Emacs用户提供了一种将AI助手Claude直接集成到开发工作流中的强大方式。通过MCP协议,它创建了一个双向桥接,让Claude能够理解并利用Emacs的强大功能,从LSP和项目管理到自定义Elisp函数。
无论你是Emacs新手还是经验丰富的用户,Claude Code IDE都能帮助你提高工作效率,提供更智能的代码建议和更准确的上下文感知。通过丰富的配置选项和扩展能力,你可以根据自己的需求定制这个工具,让它完美融入你的工作流程。
希望这篇文章能帮助你开始使用Claude Code IDE for Emacs,探索AI辅助开发的无限可能。如果你有任何问题或建议,欢迎在评论区分享你的经验和想法。