Aider 编程伙伴
Aider 是一个基于 AI 的代码助手工具,它允许开发者通过自然语言与 AI 模型交互,直接在代码库中进行代码生成、修改和重构。它支持多种 AI 模型(包括本地和远程 API),并深度集成到开发工作流中,能够显著提升开发效率。

核心特性
- 自然语言驱动:用自然语言描述需求,Aider 会自动理解并生成或修改代码。
- 上下文感知:Aider 会读取项目中的相关文件(通过 repo map),确保生成的代码符合项目结构和规范。
- 交互式审查:所有修改都会通过 ediff 展示,开发者可以逐块审查、接受或拒绝更改。
- 版本控制友好:支持自动或手动提交更改,与 Git 无缝集成。
- 可配置性强:通过 .aider.conf.yml 文件可以灵活调整各项行为,适应不同项目需求。
适用场景
- 快速实现新功能或修复 bug
- 重构现有代码,提升代码质量
- 添加测试用例和文档
- 学习新代码库或技术栈
- 代码审查和优化建议
工作流程
- 启动 Aider 并配置相关设置
- 使用 /add 命令添加需要编辑的文件
- 通过 /code 或自然语言描述需求
- 在 ediff 中审查 AI 生成的修改
- 接受合适的更改并提交到版本控制
.aider.conf.yml
aider 的配置文件,用于设置默认行为。常用的各配置项说明如下:
# 是否自动提交代码更改(建议关闭,手动控制提交)
auto-commits: false
# 保留的最大对话历史轮数,避免上下文过长
max-chat-history: 6
# 每次会话自动读取的只读文件,通常用于项目规范、约定等
read:
- CONVENTIONS.md
# 指定忽略文件列表,语法与 .gitignore 类似
aiderignore: .aiderignore
# 是否在生成代码后自动运行 lint 检查(如 flake8、eslint 等)
auto-lint: false
# 是否在生成代码后自动运行测试
test: false
# 指定使用的 AI 模型,支持本地模型或远程 API 模型
model: deepseek/deepseek-chat
.aiderignore
指定哪些文件应该被忽略,不会包含在 repo map 中。这有助于:
- 排除临时文件、构建产物和依赖目录
- 减少 repo map 的大小,提高 AI 处理效率
- 避免将敏感信息(如密钥、配置文件)暴露给 AI
/ls
列出 repo map 中的文件列表,该列表应该越聚焦越好。
Repo map 应只包含与当前任务直接相关的文件,例如正在编辑的源代码、相关配置文件(package.json、build.gradle)、接口定义(.proto、OpenAPI)、关键数据模型、相关测试文件以及项目结构说明(README.md、ARCHITECTURE.md)。
保持 repo map 聚焦至关重要。AI 模型的上下文长度有限(通常 64K‑128K tokens),过大的 repo map 会占用大量 tokens,减少可用于对话和代码生成的额度,同时可能引入噪声、降低理解准确性、拖慢响应速度,并增加 API 成本。
最佳实践是:
- 使用 `/add` 仅添加必需文件,任务完成后及时用 `/drop` 移除不再需要的文件
- 利用 `.aiderignore` 排除构建产物和依赖目录,并定期通过 `/ls` 检查以确保 repo map 保持精简。
/add
将文件添加至 aider。aider 可以查看且可以编辑这些文件。
添加到 aider 的文件应该尽可能少,这有助于:
- 让 AI 聚焦在当前任务上,避免被无关文件分散注意力
- 减少输入 token 数量,从而节省宝贵的上下文空间
- 提高 AI 的理解和响应准确性
- 更有效地利用有限的上下文窗口
/drop
将文件从 aider 中移除。处理完毕一个问题后,应该及时移除无关的文件,这有助于:
- 让 AI 聚焦在当前任务上,避免被无关信息干扰
- 减少输入 token 数量,从而节省上下文空间
- 提高 AI 的理解和响应准确性
- 更有效地利用有限的上下文窗口
/context
列出当前 session 的上下文,包括:
- 只读文件列表
- 可编辑文件列表
/token
列出 token 信息,包括:
- 输入的基础 token 量(repo map token、read token、add files token)
- 当前 session 已使用的 token 量
- 当前 session 剩余的 token 量(上下文信息在此范围内不会被截断)
- 当前 session 上下文的最大 token 容量(DeepSeek 模型通常支持 128K 或 64K 上下文长度)
/ask
向 AI 提问,但不生成或修改代码。适用于:
- 询问项目相关的概念、设计思路或最佳实践
- 获取关于代码库的解释或文档说明
- 讨论实现方案而不立即执行
- 寻求调试建议或问题分析
/code
指示 AI 生成或修改代码。这是 aider 的核心功能,适用于:
- 实现新功能或修复 bug
- 重构现有代码
- 添加测试用例
- 编写文档字符串或注释
使用 /code 时,应尽可能明确地描述需求,并指定要修改的文件。
/commit
提交当前所有已暂存的更改。aider 会自动生成提交信息,但你可以:
- 使用 /commit “自定义提交信息” 来指定信息
- 在提交前查看 diff,确保更改符合预期
- 结合 auto-commits: false 配置,实现手动控制提交
/web
在浏览器中打开 aider 的 Web 界面(如果支持)。这通常用于:
- 查看更丰富的交互界面
- 使用图形化工具管理会话
- 访问在线文档或额外功能
/clear
清除当前的对话历史,但保留已添加到会话中的文件。这有助于:
- 重置 AI 的上下文,避免历史对话干扰新任务
- 减少 token 使用量,释放上下文空间
- 开始一个全新的对话分支,同时保持对相同文件的访问
/reset
完全重置当前会话,包括:
- 清除所有对话历史
- 移除所有已添加的文件(回到初始状态)
- 重置 token 计数器
适用于需要从头开始全新任务的情况。
ediff
aider 在修改文件后会自动启动 ediff 来展示改动差异。ediff 是 Emacs 内置的差异对比工具,可以让你逐块审查、接受或拒绝 AI 所做的修改。
基本操作
| 按键 | 功能说明 |
|---|---|
| ? | 显示帮助信息,列出所有可用命令 |
| q | 退出 ediff 会话(不会保存任何更改) |
| a | 将当前差异块从缓冲区 A(原始版本)复制到缓冲区 B(修改版本) |
| ra | 撤销上一次对缓冲区 A 的操作 |
| b | 将当前差异块从缓冲区 B(修改版本)复制到缓冲区 A(原始版本) |
| rb | 撤销上一次对缓冲区 B 的操作 |
| n | 跳转到下一个差异块 |
| p | 跳转到上一个差异块 |
| v | 垂直分割窗口查看差异(默认) |
| h | 水平分割窗口查看差异 |
| \ | 将当前差异块在两侧缓冲区之间交换 |
| * | 将当前差异块标记为“已解决”,后续跳过该块 |
| D | 显示当前差异块的详细差异信息 |
| E | 进入编辑模式,可以直接在缓冲区中修改内容 |
| ! | 执行外部 diff 命令并刷新差异显示 |
工作流程建议
-
启动时:aider 完成代码修改后会自动弹出 ediff 窗口,通常分为三个区域:
- 左侧:原始文件(缓冲区 A)
- 右侧:修改后的文件(缓冲区 B)
- 底部:控制面板(显示操作提示)
-
审查差异:
- 使用 `n` 和 `p` 在各个差异块之间导航
- 仔细阅读每个差异块,确保 AI 的修改符合预期
- 注意是否有不必要或错误的更改
-
接受或拒绝修改:
- 如果接受 AI 的修改,不用做任何处理,跳过代码块
- 如果拒绝修改,按 `a` 将左侧内容复制到右侧(保持原样)
- 也可以直接按 `q` 退出,接受全部修改
aidermacs
aidermacs 是一个专为 Emacs 设计的 Aider 前端,它提供了更便捷的交互界面和快捷键,让开发者能够在 Emacs 中更高效地使用 Aider 进行 AI 辅助编程。通过 aidermacs,你可以快速启动 Aider 会话、管理文件、执行代码生成任务,而无需离开 Emacs 环境。
主要功能
- 快速启动:通过快捷键(如 `SPC d`)一键打开 Aider 交互菜单
- 会话管理:轻松创建、切换和关闭 Aider 会话
- 配置集成:支持在 Emacs 配置中直接设置 Aider 的各项参数
- 多后端支持:可选择使用 vterm、eshell 等终端后端运行 Aider
- 本地化支持:可设置聊天语言(如中文),提升交互体验
配置说明
以下是一个典型的 aidermacs 配置示例,展示了如何设置快捷键、禁用自动提交、指定中文聊天语言等:
(map! :nv "SPC d" 'aidermacs-transient-menu )
(use-package aidermacs
;; :bind (("SPC d" . aidermacs-transient-menu))
:config
(setq aidermacs-auto-commits nil)
(setq aidermacs-extra-args (list "--chat-language" "zh-cn"))
(setq aidermacs-exit-kills-buffer t)
(setq aidermacs-backend 'vterm)
:custom
; See the Configuration section below
(aidermacs-default-chat-mode 'architect)
(aidermacs-default-model "deepseek/deepseek-chat"))