处理大型代码库会带来一套不同于小型项目的新挑战。基于我们在扩展 Cursor 自身代码库的经验,以及来自管理超大代码库的客户洞察,我们总结出了一些应对复杂性提升的实用范式。 在这份指南中,我们会介绍一些我们验证过对大型代码库很有用的技巧。

用 Chat 快速熟悉陌生代码

浏览大型代码库,尤其是第一次上手时,确实挺有挑战。你常常需要用 grep、搜索、到处点来点去,才能定位到具体的代码位置。借助 Chat,你可以直接提问,快速找到想要的内容,并拿到它的详细工作原理解释。 这里我们在寻求帮助,想了解 Cursor 中代码库索引的实现细节,甚至还会要一些示例来帮助理解。

为领域知识编写规则

如果你要让一位新同事上手你的代码库,你会提供哪些背景信息,来确保他们能尽快开始做出有意义的贡献? 你对这个问题的回答,对 Cursor 来说同样很有价值。对每个组织或项目而言,总会有一些隐性知识无法完全体现在文档里。有效使用规则,是确保 Cursor 了解全貌的最佳方式。 例如,如果你在编写如何实现一个新特性或服务的说明,不妨写一条简短的规则,把它记录下来以备将来参考。
Boilerplate
---
description: Add a new VSCode frontend service
---

1. **Interface Definition:**
   - Define a new service interface using `createDecorator` and ensure `_serviceBrand` is included to avoid errors.

2. **Service Implementation:**
   - Implement the service in a new TypeScript file, extending `Disposable`, and register it as a singleton with `registerSingleton`.

3. **Service Contribution:**
   - Create a contribution file to import and load the service, and register it in the main entrypoint.

4. **Context Integration:**
   - Update the context to include the new service, allowing access throughout the application.
如果你有希望 Cursor 遵循的通用格式规范,可以基于 glob 模式自动附加规则。
Formatting
---
globs: *.ts
---
- Use bun as package manager. See [package.json](mdc:backend/reddit-eval-tool/package.json) for scripts
- Use kebab-case for file names
- Use camelCase for function and variable names
- Use UPPERCASE_SNAKE_CASE for hardcoded constants
- Prefer `function foo()` over `const foo = () =>`
- Use `Array<T>` instead of `T[]`
- Use named exports over default exports, e.g (`export const variable ...`, `export function `)

紧贴计划制定流程

对于较大的改动,花比平时更多的精力来制定一个精确、边界清晰的计划,能显著提升 Cursor 的输出质量。 如果你针对同一个提示尝试了几种不同的变体后仍然得不到想要的结果,考虑先跳出细节,从零开始制定一个更详细的计划,就像你在给同事写一份 PRD 一样。很多时候,最难的是搞清楚应该做什么改动——这更适合由人来判断。有了合适的指令,我们就能把实现中的部分环节交给 Cursor。 利用 AI 增强计划制定流程的一种方式是使用 Ask 模式。要创建计划,在 Cursor 中开启 Ask 模式,把你从项目管理系统、内部文档或零散想法中已有的上下文都丢进去。想一想代码库里有哪些文件和依赖是你已经确定要纳入的。可能是一个包含你想要集成的代码片段的文件,或者干脆是整个文件夹。 这是一个示例提示:
Planning prompt
- create a plan for how we shoud create a new feature (just like @existingfeature.ts)
- ask me questions (max 3) if anything is unclear
- make sure to search the codebase

@Past Chats (my earlier exploration prompts)

here's some more context from [project management tool]:
[pasted ticket description]
我们让模型通过向人类提问来创建计划并收集上下文,同时引用任何早期的探索性提示以及工单描述。推荐使用 claude-3.7-sonnetgemini-2.5-proo3 这类思考型模型,因为它们能理解变更意图,并更好地综合出计划。 基于这些内容,你就可以在开始实现之前,在 Cursor 的帮助下迭代完善这个计划。

为任务选对合适的工具

高效使用 Cursor 的关键技能之一是为任务选对工具。先想清楚你要达成什么,再选择能让你保持心流的方式。
ToolUse caseStrengthLimitation
Tab快速、手动修改完全掌控,速度快仅限单文件
Inline Edit在单个文件内的局部修改聚焦编辑仅限单文件
Chat更大范围的多文件修改自动聚合上下文,深度编辑更慢、上下文重
每个工具都有自己的最佳使用场景:
  • Tab 适合你想亲自把控的快速编辑
  • Inline Edit 适合对特定代码片段做聚焦修改
  • Chat 适合需要 Cursor 理解更广泛上下文的较大改动
使用 Chat 模式时(可能稍慢但非常强大),通过提供充分的上下文来帮它更好地帮你。用 @files 指向你想要借鉴的相似代码,或用 @folder 让它更好理解你的项目结构。也别怕把大改动拆成小块——开启新的对话能让目标更聚焦、效率更高。

要点

  • 收窄改动范围,别一次做太多
  • 尽可能提供相关上下文
  • 让 Chat、Inline Edit 和 Tab 各司其职
  • 多开新对话
  • Ask mode 做规划,用 Agent mode 实现