跳到主要内容

处理大型代码库的实践指南

相较于小型项目,处理大型代码库会带来一系列全新的挑战。基于我们扩展 Cursor 自身代码库的经验,以及服务管理海量代码库客户所获得的洞见,我们总结出了一些应对复杂场景的有效模式。

本指南将逐步讲解我们在处理大型代码库时发现的实用技巧。

使用 Chat 功能快速理解陌生代码

在庞大的代码库中导航(尤其是面对新接触的代码时)可能充满挑战。开发者通常需要反复使用 grep 命令、全局搜索和点击跳转来定位目标代码片段。通过 Chat 功能,您可以直接提问来快速定位所需代码,并获取其工作原理的详细解释。

以下示例展示了如何通过 Chat 功能快速获取 Cursor 代码库索引机制的实现细节,甚至要求生成代码示例来辅助理解。


性能优化提示: 为增强 Cursor 对代码库结构的理解能力,建议在 设置 中启用 包含项目结构(Include Project Structure)选项以提升分析效果。

编写领域特定知识的规则

如果您正在引导新协作者加入代码库,您会提供哪些上下文信息以确保他们能够快速开展有价值的贡献?

这些问题的答案对于 Cursor 理解项目同样具有重要价值。每个组织或项目都蕴含着可能未完整记录在文档中的潜在知识。有效运用规则是确保 Cursor 全面理解项目背景的最佳方式。

例如,当您编写新功能或服务的实现指南时,可以考虑编写简明规则来为后续使用提供文档支持。

模板示例
---
description: 添加新的 VSCode 前端服务
---

1. **接口定义:**
- 使用 `createDecorator` 定义新服务接口,并确保包含 `_serviceBrand` 以避免错误

2. **服务实现:**
- 在新建的 TypeScript 文件中实现服务,继承 `Disposable`,并通过 `registerSingleton` 注册为单例

3. **服务注入:**
- 创建贡献文件来导入和加载服务,并在主入口文件中完成注册

4. **上下文集成:**
- 更新上下文以包含新服务,确保应用全局可访问

如果您希望确保 Cursor 遵循特定的格式规范,可以考虑基于 glob 模式自动附加规则。

格式规范
---
globs: *.ts
---
- 使用 bun 作为包管理器。请参阅 [package.json](mdc:backend/reddit-eval-tool/package.json) 以获取脚本
- 文件名使用 kebab-case
- 函数和变量名使用 camelCase
- 硬编码常量使用 UPPERCASE_SNAKE_CASE
- 优先使用 `function foo()` 而不是 `const foo = () =>`
- 使用 `Array<T>` 而不是 `T[]`
- 使用命名导出而非默认导出,例如 (`export const variable ...`, `export function `)

紧随计划创建过程

对于较大的改动,投入超出平均水平的思考来制定一个精确、范围明确计划,可以显著提升 Cursor 的输出效果。

如果你发现几次尝试不同的相同提示词后,仍然得不到你想要的结果,可以考虑缩小范围,从零开始创建一个更详细的计划,就像为同事编写产品需求文档一样。很多时候,困难之处在于确定应该做出什么改变,而这项任务非常适合人类。有了正确的指令,我们可以将实现的部分工作委托给 Cursor。

使用 AI 增强计划创建过程的一种方式是使用 Ask 模式。要创建计划,请在 Cursor 中打开 Ask 模式,并将来自项目管理系统、内部文档或零散想法的任何上下文信息输入进去。

考虑一下你已经在代码库中知道想要包含哪些文件和依赖项。这可以是一个包含你想要集成的代码片段的文件,或者可能是一个整个文件夹。

这里是一个示例提示词:

示例提示词
- 制定一个计划,说明我们应该如何创建一个新功能(就像 @existingfeature.ts 一样)
- 如果有任何不清楚的地方,请问我问题(最多 3 个)
- 确保搜索代码库

@过去的聊天记录(我之前的探索提示)

这里是来自 [项目管理工具] 的更多上下文:
[粘贴的工单描述]

该提示词要求模型通过向人类提问来制定计划并收集上下文,同时参考早期探索性提示和工单描述。推荐使用 claude-3.7-sonnetgemini-2.5-proo3 等思维模型,这些模型能够更好理解变更意图并综合制定计划。

通过这种方式,您可以在开始实施前借助 Cursor 迭代完善计划。

为工作选择合适的工具

在使用 Cursor 时,最重要的技能之一是选择适合任务的工具。思考你想要完成什么,并选择能让你保持专注的方法。

工具使用场景优点局限性
Tab快速手动变更完全控制,速度快单文件
Inline Edit(行内编辑)单个文件内的范围性变更专注编辑单文件
Chat更大范围、跨文件的变更自动收集上下文,深度编辑速度较慢,依赖上下文

每款工具都有其用武之地:

  • Tab 是你快速编辑时想要掌控全局的首选
  • Inline Edit(行内编辑) 适合你需要专注于代码特定部分进行修改时
  • Chat 功能最适合那些需要 Cursor 理解更广泛上下文的大规模变更

当你使用Chat 模式(虽然感觉稍慢但功能极其强大)时,通过提供良好上下文来帮助它帮助你。使用 @files 指向你想模仿的相似代码,或使用 @folder 让它更好地理解你的项目结构。而且不要害怕将重大变更分解成更小的部分——开启新的Chat窗口有助于保持专注和高效。

要点

  • 缩小变更范围,一次不要试图做太多事情
  • 尽可能包含相关背景信息
  • 使用 Chat、行内编辑和 Tab 完成它们最擅长的事情
  • 经常创建新 Chat 窗口
  • Ask 模式规划,用 Agent 模式实现