在使用 Cursor 半个月后,我总结了这些使用心得

最近半个月,我尝试用 Cursor + Claude 作为日常 C++ 开发的主要助手。期间踩了不少坑,也摸索出了一些相对靠谱的用法。本文简单记录一下我的使用体验、配置规则、Prompt 编写建议,以及它的优点和局限,供你参考。


Cursor 是什么?

Cursor 是一个基于 Claude(还有其他大模型)的代码编辑器插件。它能帮你补全、重构、分析代码,还能直接执行一些复杂的修改任务——听起来就像是个“AI 搭档”。

但说实话,目前它离“完全替你开发”还有相当的距离。尤其在中大型项目中,使用 Cursor 容易陷入「build → ask → fix → repeat」的循环,AI 也会在其中频繁“降智”。如果你自己不能快速定位问题,效率反而可能被拖慢。

所以我的建议是:

  • 把它当成助手,不是替代品。

  • 你还是要保持对项目的掌控,Cursor 是锦上添花,不是雪中送炭。

  • 特别注意在借助 Agent 重构结构时需及时备份,很多时候 AI 容易用力过猛


使用前的准备:规则配置很关键

https://github.com/sanjeed5/awesome-cursor-rules-mdc.git 这个项目里包含很多(才疏学浅很多工程化的内容没有看懂)参考他的样式、包含哪些内容自定义自己习惯的规则就好

项目结构建议(以 C++ 为例)

为了让 Cursor 更好理解项目上下文,同时方便后期维护,我建议提前规范项目结构,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
## 项目目录结构

1. **模块化组织**
- 每个模块一个文件夹,以模块名命名;
- 同一模块的 `.hpp``.cpp` 文件放在一起。

2. **特殊目录**
- `util/`:通用工具代码;
- `3rd/`:第三方依赖;
- `cmake/`:CMake 配置,子结构如下:

- `build.cmake`:构建相关;
- `develop.cmake`:开发相关;
- `3rd.xxxx.cmake`:第三方依赖;
- 所有第三方库建议通过 Git Submodule,而不是 `find_package`
````

---

### 命名规范建议

统一的命名风格能显著提升 AI 理解代码的能力。下面是我实践中的一套:

```markdown
## 命名规则(C++)

1. 使用 snake_case 命名法;
2. 所有变量、函数、类型名统一小写加下划线;
3. 类成员变量以下划线 `_` 开头;
4. 模板参数以 `_tt`(类型)或 `_vv`(值)结尾,必要时可简写为 `tt`。

.clang-format 配置(建议添加到规则文档)

Cursor 对格式也有一定敏感度,一个稳定的格式化配置可以减少 AI 的错误改写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Language: Cpp
BasedOnStyle: Google
IndentWidth: 2
TabWidth: 2
ContinuationIndentWidth: 2
UseTab: Never
AlignAfterOpenBracket: DontAlign
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
ColumnLimit: 120
FixNamespaceComments: true
ShortNamespaceLines: 0

Prompt 怎么写更有效?

这是重点。如果你希望 AI 给出可用代码、结构、建议,一定要把需求说清楚,而且提供完整上下文

比如下面这个 Prompt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
我正在使用 C++ 和 [Seastar](https://github.com/scylladb/seastar) 框架开发一个高性能服务端网关,要求同时支持 HTTP、TCP、UDP 三种协议,并尽可能支持 WebSocket。目标是实现一个适用于游戏或微服务系统的高并发异步网关,具备以下特性:

1. 使用 Seastar 的 `sharded` 模型按 CPU 分片运行;
2. HTTP 模块用于提供 RESTful 接口;
3. TCP 模块用于长连接服务,支持 session 管理;
4. UDP 模块用于无连接消息传输;
5. WebSocket(如有实现建议,欢迎提供),通过 HTTP 升级连接;
6. 所有模块需异步非阻塞,使用 Seastar 的 `future` 模型;
7. 框架应线程安全、易于扩展,便于后续添加协议(如 QUIC/NATS 等);
8. 也需要客户端,方便服务器访问外部内容。

请帮我:
- 提供一个项目骨架和可运行的项目示例;
- 对模块如何组织(HTTP/TCP/UDP/WebSocket)提供结构建议;
- 推荐 Seastar 中合适的组件;
- 如果 WebSocket 没有内建支持,请指出如何手动实现;
- 补充开发过程中需要注意的性能或异步陷阱;
- 依赖 asio no-boost 生成相同接口的代码,并且给出对比压测的代码,我后期需要对比压测 asio & seastar;
- 使用不同数据长度作为压测样例。

小贴士:

  • 不要只问“帮我写一个 XXX”;
  • 提供清晰背景、目标、技术栈;
  • 最好分点描述需求,避免一次性丢一个巨型段落;
  • 可以先让 AI 草拟,再自己逐步 refine。

Cursor 使用功能简表

功能 用法说明 适合场景
ask 直接提问或让 AI 解释某段代码 快速查询、代码含义分析、生成示例
agent 执行更复杂的修改或重构 多文件重构、批量命名更改、自动注释
manual 无 AI 介入,仅记录操作历史 基本用不到,可忽略

使用总结 & 建议

Cursor 是个好工具,但它不会替你写完项目。
它像一个能说会动、偶尔犯迷糊的实习生——能帮上忙,但你得会指挥它。

几点使用建议:

  • 一定要写好项目规则(包括 clang-format、命名规范等);
  • Prompt 一定要完整清晰;
  • 不要相信 AI 给出的东西是“能跑”的,尤其涉及编译或跨模块逻辑时;
  • 手动改过的代码注意备份,Cursor 有时候会“自作主张”还原掉。

最后:继续学习、保持代码的主控权,才是最高效率的合作方式。


如果你也在用 Cursor,欢迎留言分享你的使用体验!

------ 本文结束 ------
------ 版权声明:转载请注明出处 ------

欢迎关注我的其它发布渠道