一个高效使用cursor开发项目的方法,怎么让 AI 写的代码不跑题?
zhezhongyun 2025-07-21 19:06 43 浏览
最近又用 cursor 做了一个小应用,番茄时钟,用来管理自己的时间,提高效率。然后使用 cursor 开发的过程中。有了一些新的感悟。找到了一条可以让 Curosr不跑题的办法。
生成一份详细的项目资料。然后配置.cursorrule。让Cursor每次开发都参考资料,并自动更新。当然这些也都可以让 AI 帮你完成。下面的用 3 个步骤完成配置。
(ps:这是一个小项目,大型的项目可能效果暂不明确。但是对一个纯用 Cursor开发的小应用,效果嘎嘎香,再也不跑题了)
- 给项目写一份详细的资料
指令:
写一个详细的项目资料project-overview.md ,等我下次再提需求时,你可以参考快速熟悉项目。- 给项目配置一个 cursorrule
指令:
给项目配置一个 cursorrule- 让 rule 自动参考以及更新project-overview.md
指令
优化 rule,目的是每当我提问的时候,可以参考project-overview.md学习项目资料,当 AI 修改完成时 ,更新project-overview.md文件。以保持对话的连续性和稳定性。这样每次让 cursor修改功能时,他都会记录到文件中,可以保持AI 对话的连续性,也方便自己复盘。
附上我的cursor rule
{
"editor": {
"formatOnSave": true,
"tabSize": 2,
"insertSpaces": true,
"defaultFormatter": "prettier"
},
"typescript": {
"preferences": {
"quoteStyle": "single",
"importModuleSpecifierPreference": "relative",
"jsxAttributeCompletionStyle": "auto"
},
"suggest": {
"completeFunctionCalls": true,
"autoImports": true
},
"updateImportsOnFileMove": "always",
"format": {
"semicolons": true,
"singleQuote": true,
"trailingComma": "es5"
}
},
"javascript": {
"preferences": {
"quoteStyle": "single"
},
"format": {
"semicolons": true,
"singleQuote": true
}
},
"prettier": {
"singleQuote": true,
"semi": true,
"tabWidth": 2,
"trailingComma": "es5",
"printWidth": 100,
"bracketSpacing": true,
"jsxBracketSameLine": false,
"arrowParens": "avoid"
},
"eslint": {
"run": "onSave",
"packageManager": "npm"
},
"files": {
"exclude": [
"node_modules",
"dist",
"build",
"coverage",
".git",
"dev-dist"
],
"watcherExclude": {
"**/node_modules/**": true,
"**/dist/**": true,
"**/build/**": true
},
"associations": {
"*.tsx": "typescriptreact",
"*.ts": "typescript",
"*.jsx": "javascriptreact",
"*.js": "javascript"
}
},
"search": {
"exclude": {
"**/node_modules": true,
"**/dist": true,
"**/build": true
}
},
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true,
"source.organizeImports": true
},
"project": {
"name": "番茄时间管理应用",
"patterns": [
"**/*.ts",
"**/*.tsx",
"**/*.js",
"**/*.jsx",
"**/*.json",
"**/*.css",
"**/*.html"
],
"ignore": [
"node_modules",
"dist",
"build",
"coverage",
".git",
"dev-dist"
],
"documentation": {
"mainFile": "project-overview.md",
"autoReference": true,
"autoUpdate": true
}
},
"cursor": {
"ai": {
"enableCompletion": true,
"enableChat": true,
"contextFiles": [
"project-overview.md"
],
"hooks": {
"onConversationStart": [
{
"action": "readFile",
"file": "project-overview.md"
}
],
"onCodeModification": [
{
"action": "updateDocumentation",
"file": "project-overview.md"
}
]
},
"customInstructions": "在每次对话开始时,请先阅读 project-overview.md 文件以了解项目结构和功能。在完成代码修改后,请更新 project-overview.md 文件,添加新的功能或修改的内容。保持文档的准确性和最新状态。"
}
}
} 以及project-overview
# 番茄时间管理应用 - 项目概述
## 技术栈
- 前端框架:React + TypeScript
- UI组件库:Ant Design
- 路由管理:React Router
- 构建工具:Vite
- 数据存储:localStorage
## 项目结构
```
src/
├── assets/ # 静态资源
├── components/ # UI组件
│ ├── Timer.tsx # 计时器组件
│ ├── Statistics.tsx
│ ├── TimerRecords.tsx
│ ├── CategoryManager.tsx
│ ├── Settings.tsx
│ └── ...
├── hooks/ # 自定义钩子
│ ├── useTimer.ts # 计时器逻辑
│ ├── useCategories.ts
│ ├── useSettings.ts
│ ├── useStatistics.ts
│ ├── useTimerRecords.ts
│ └── useTagHistory.ts
├── pages/ # 页面组件
│ └── Home.tsx
├── services/ # 服务
│ └── TimerService.ts # 计时器服务(单例模式)
├── store/ # 状态管理
│ └── AppContext.tsx
├── types/ # 类型定义
│ └── index.ts
├── utils/ # 工具函数
├── App.tsx # 应用入口
└── main.tsx # 渲染入口
```
## 核心功能与实现
### 1. 计时器功能 (Timer.tsx, useTimer.ts, TimerService.ts)
- **状态管理**:使用 `useTimer` 钩子管理计时器状态,包括工作/休息/暂停/空闲
- **倒计时逻辑**:使用 `setInterval` 实现倒计时,支持暂停和恢复
- **通知功能**:计时结束时发送系统通知
- **画中画模式**:支持在浏览器中使用画中画模式显示计时器
- **标签功能**:可以为每次计时添加自定义标签
- **跨页面计时**:使用单例模式的 TimerService 确保在页面切换时计时器继续运行
- **事件系统**:使用发布-订阅模式实现计时器事件通知
- **状态持久化**:定期将计时器状态保存到 localStorage,确保页面刷新后能恢复状态
- **暂停状态UI**:在计时器暂停时同时显示继续和重置按钮,提升用户体验
- **智能记录保存**:重置计时器时,如果已计时超过3分钟,将调用complate保存记录;否则不保存
### 2. 数据管理 (AppContext.tsx)
- **全局状态**:使用 Context API 管理应用状态
- **数据持久化**:所有数据存储在 localStorage 中
- **状态类型**:
- `TimerRecord`: 记录每次计时的详细信息
- `CategoryType`: 分类信息
- `TimerSettings`: 计时器设置
- `Statistics`: 统计数据
### 3. 分类管理 (CategoryManager.tsx, useCategories.ts)
- 支持创建、编辑和删除分类
- 每个分类有名称和颜色标识
- 默认提供一个"默认"分类
### 4. 记录管理 (TimerRecords.tsx, useTimerRecords.ts)
- 记录每次计时的开始时间、结束时间、持续时间、类型和分类
- 支持按日期和分类筛选记录
- 支持删除记录
### 5. 统计功能 (Statistics.tsx, useStatistics.ts)
- 统计总工作时间和休息时间
- 按日期统计工作和休息时间
- 按分类统计工作时间
- 提供可视化图表展示统计数据
### 6. 设置功能 (Settings.tsx, useSettings.ts)
- 自定义工作和休息时长
- 设置是否自动开始下一个工作/休息周期
- 重置设置到默认值
## 数据结构
### TimerRecord (计时记录)
```typescript
{
id: string;
startTime: string;
endTime: string;
duration: number; // 持续时间(分钟)
type: 'work' | 'break'; // 工作或休息
categoryId: string | null; // 分类ID
completed: boolean; // 是否完成
label?: string; // 自定义标签/备注
}
```
### CategoryType (分类)
```typescript
{
id: string;
name: string;
color: string;
}
```
### TimerSettings (设置)
```typescript
{
workDuration: number; // 工作时长(分钟)
breakDuration: number; // 休息时长(分钟)
autoStartBreak: boolean; // 自动开始休息
autoStartWork: boolean; // 自动开始工作
}
```
### TimerState (计时器状态)
```typescript
{
state: 'idle' | 'working' | 'breaking' | 'paused';
timeLeft: number;
isActive: boolean;
currentSession: TimerRecord | null;
selectedCategoryId: string;
label: string;
}
```
## 最近修复和改进
- 计时器完成处理逻辑:在计时器完成时正确清除当前会话状态,避免状态不一致问题
- 跨页面计时功能:实现了 TimerService 单例服务,确保在页面切换时计时器继续运行
- 事件系统:使用发布-订阅模式实现计时器事件通知,提高组件间通信效率
- 暂停状态UI优化:在计时器暂停时同时显示继续和重置按钮,提升用户体验
- 智能记录保存:重置计时器时,根据已计时时长决定是否记录
- 超过3分钟:标记为未完成,保存到记录
- 不足3分钟:不保存记录学会了赶紧去试一下,好用的话,记得回来写感悟哈!
相关推荐
- Python入门学习记录之一:变量_python怎么用变量
-
写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...
- python变量命名规则——来自小白的总结
-
python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...
- Python入门学习教程:第 2 章 变量与数据类型
-
2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...
- 绘制学术论文中的“三线表”具体指导
-
在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...
- Python基础语法知识--变量和数据类型
-
学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...
- 一文搞懂 Python 中的所有标点符号
-
反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...
- Python变量类型和运算符_python中变量的含义
-
别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...
- 从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序
-
在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...
- Python中下划线 ‘_’ 的用法,你知道几种
-
Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...
- 解锁Shell编程:变量_shell $变量
-
引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...
- 一文学会Python的变量命名规则!_python的变量命名有哪些要求
-
目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...
- 更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for
-
src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...
- C++第五课:变量的命名规则_c++中变量的命名规则
-
变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....
- Rust编程-核心篇-不安全编程_rust安全性
-
Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...
- 探秘 Python 内存管理:背后的神奇机制
-
在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- opacity 属性 (32)
- transition 属性 (33)
- 1-1. 变量声明 (31)
