AI - CurSor精准上下文+应用(三)
可约束代码风格(如强制用驼峰命名、要求函数必须写注释 )能限定技术选型(如禁止使用某老旧库、优先用项目指定工具类 )提前指定核心参数(如提前设置连接数据库的地址和账号密码等)Rule主要的配置方案有两种:维度项目规则(Project Rules)用户规则(User Rules)作用范围仅对当前项目生效,团队成员共享相同规则对所有项目生效,个人专属配置存储位置项目根目录下的.cursor/rules
请参考:
AI - CurSor概述,安装注册(一)
AI - CurSor核心功能+应用(二)
一、CurSor精准上下文
在 Cursor 中,精准指定“上下文(Context)” 是提升 AI 辅助编程效率的关键。通过明确代码范围、项目结构和业务逻辑,可让 AI 更准确地理解需求,是AI读懂代码,精准响应的关键
1.1、Codebase Indexing 代码库索引
打开项目时,每个 Cursor 实例都将初始化该工作区的索引。初始索引设置完成后,Cursor 将自动为添加到工作区的任何新文件编制索引,以使您的代码库上下文保持最新:
- 快速 “读懂” 你的项目结构(哪些是工具文件、哪些是业务逻辑)
- 定位相关代码(如搜索
getUser时,知道优先查userService.js) - 理解代码关系(如
Order类和Product类的关联)
Cursor 中的作用:AI 分析索引内容后,生成代码时会更贴合项目实际(如使用已有工具函数、遵循命名规范)。
1.1.1、代码库索引配置和示例
代码库索引的状态位于 cursor settings > Indexing & Docs

测试示例:
查看当前项目结构,并使用文字图形形式罗列出来!

1.1.2、忽略文件配置
Cursor 读取项目的代码库并为其编制索引以支持其功能。可以通过将 .cursorignore 文件添加到根目录来控制,哪些文件被忽略和Cursor限制访问。
- 提升索引速度:排除大型依赖、生成文件(如
node_modules、dist) - 避免干扰:某些配置文件可能包含敏感信息或与当前任务无关
配置 .cursorignore忽略文件:
-
自己创建
.cursorignore文件添加到代码库目录的根目录下,并列出要忽略的目录和文件 -
使用cursor配置快捷创建忽略文件
cursor setting > Indexing & Docs > Configure ignored files

忽略文件配置测试:
-
创建忽略文件

-
添加忽略配置
# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv) index.html style.css main.js -
测试效果展示

1.2、Rules 规则
1.2.1、规则介绍
Rules是给Cursor AI功能(规则适用于 Chat和 Cmd K)生成结果添加规则和限制,让 AI 生成的代码贴合团队规范,减少人工二次修改成本,主要的作用如下:
- 可约束代码风格(如强制用驼峰命名、要求函数必须写注释 )
- 能限定技术选型(如禁止使用某老旧库、优先用项目指定工具类 )
- 提前指定核心参数(如提前设置连接数据库的地址和账号密码等)
Rule主要的配置方案有两种:
| 维度 | 项目规则(Project Rules) | 用户规则(User Rules) |
|---|---|---|
| 作用范围 | 仅对当前项目生效,团队成员共享相同规则 | 对所有项目生效,个人专属配置 |
| 存储位置 | 项目根目录下的 .cursor/rules/随意.mdc 文件 |
用户配置目录(如 ~/.cursor/rules) |
| 同步方式 | 随项目代码提交到版本库(如 Git),团队共享 | 仅本地生效,不随项目同步 |
| 适用场景 | 统一团队编码规范(如函数注释格式、依赖版本) | 个人习惯(如快捷键、AI 响应风格) |
注: 项目规则和用户规则同时存在并且规则冲突,项目规则优先级更高!!!
1.2.2、项目规则配置
-
项目下创建规则文件
- 创建文件夹自定义文件
项目/.cursor/rules/随意命名.mdc - 快捷命令方式创建
Ctrl + Shift + P> “New Cursor Rule”
- 创建文件夹自定义文件
-
编写项目规则文件
-
项目规则文件测试及效果展示
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
/**
* 简易的内存身份验证服务。
*/
public class AuthService {
private final Map<String, String> credentialStore = new ConcurrentHashMap<>();
/**
* 注册新用户。
*
* @param username 待注册用户名
* @param password 明文密码
* @return 注册是否成功
*/
public boolean zmzwfRegister(String username, String password) {
if (!zmzwfIsValidCredential(username, password) || credentialStore.containsKey(username)) {
return false;
}
credentialStore.put(username, password);
return true;
}
/**
* 登录已有用户。
*
* @param username 用户名
* @param password 明文密码
* @return 登录是否成功
*/
public boolean zmzwfLogin(String username, String password) {
if (!zmzwfIsValidCredential(username, password)) {
return false;
}
return Objects.equals(credentialStore.get(username), password);
}
/**
* 校验用户名及密码的有效性。
*
* @param username 用户名
* @param password 密码
* @return 凭证是否合法
*/
private boolean zmzwfIsValidCredential(String username, String password) {
return username != null && !username.trim().isEmpty()
&& password != null && !password.trim().isEmpty();
}
}

1.2.3、用户规则配置
1、用户规则在cursor settings -- Rules and Commands

2、添加规则内容即可
如果有数据库,连接数据库
地址:localhost
账号:root
密码:root

3、用户规则不支持 MDC,它们只是纯文本
1.2.4、mdc语法
Cursor 的 MDC(Markdown with Cursor)语法是专门为编写项目规则设计的轻量级格式,它结合了 Markdown 的可读性和元数据配置能力。
1.2.4.1、MDC 文件组成部分:
- 前置元数据(Frontmatter)
- 用
---包裹的 YAML 格式配置 - 定义规则的基本属性(如作用范围、优先级)
- 用
- 规则内容(Markdown 正文)
- 用 Markdown 语法写具体规则
1.2.4.2、前置元数据
---
# 官方约定字段(推荐用,AI 更易理解)
description: "后端项目规则"
globs: "src/**/*.java"
priority: 10
# 自定义字段(自己或团队约定含义)
author: "技术团队"
review_date: "2025-11-28"
special_rule: "仅周一至周五生效"
---
常用元数据字段
| 字段 | 作用 | 示例 |
|---|---|---|
description |
描述规则用途,指导 AI 如何应用规则 | "后端项目规则" |
globs |
指定规则生效的文件范围(支持 glob 语法) | "src/**/*.{java,js,xml}" |
priority |
规则优先级(数值越大越优先),解决规则冲突 | 10 |
version |
规则版本号(可选) | "1.0.0" |
1.2.4.3、规则内容(Markdown 正文)
用 Markdown 的标题、列表、代码块等语法写具体规则,常见结构:
代码风格规则(最常用)
# 一、代码风格
1. 函数必须包含 JSDoc 注释
- 至少包含 `@param` 和 `@return` 描述
2. 变量命名必须使用驼峰命名法(camelCase)
3. 每行代码长度不超过 120 个字符
# 二、技术选型
- 禁止直接使用原生 fetch,必须通过项目封装的 request 工具
- 优先使用 React Hooks 而非 Class 组件
安全约束规则
# 安全规范
1. 禁止使用 eval() 函数
2. SQL 查询必须使用参数化查询,防止注入攻击
3. 敏感信息(如 API 密钥)必须从环境变量读取
特殊语法:引用项目文件
用 @file 引用项目内的配置文件,让 AI 参考:
# 工具链配置
1. ESLint 规则必须符合 @file .eslintrc.js
2. 测试用例必须遵循 Jest 框架规范
1.2.4.4 完整示例(TypeScript 项目规则)
---
description: "TypeScript 项目编码规范"
globs: "src/**/*.ts"
priority: 10
---
# 一、基础规范
1. 所有文件必须使用 UTF-8 编码
2. 统一使用 2 空格缩进
# 二、类型约束
1. 禁止使用隐式 any 类型
- 示例:`const num: number = 123`(显式)
- 禁止:`const num = 123`(隐式)
2. 接口命名必须以 `I` 开头(如 `interface IUser`)
# 三、项目约束
- 所有 HTTP 请求必须通过 @file src/utils/request.ts 封装的工具
- 状态管理必须使用 Redux Toolkit,禁止直接修改 state
1.3、@符号
在 Cursor 中使用 @ 符号在聊天中引用代码、文件、文档和其他上下文的指南,直接更具体的指定上下文环境!
以下是所有可用 @ 符号的列表:
- @Files- 引用项目中的特定文件
- @Folders - 引用整个文件夹以获得更广泛的上下文
- @Code - 引用代码库中的特定代码片段或符号
- @Docs- 访问文档和指南
- @Git- 访问 git 历史记录和更改
- @Past Chats- 使用汇总的 Composer 会话
- @Cursor Rules-使用光标规则
- @Web- 参考外部 Web 资源和文档
- @Lint Errors- 引用 lint 错误(仅限Chat)

1.3.1、@Files使用和测试
1、准备测试文件ArrayUtils.java
//需求:写一个工具类计算数组平均值
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ArrayUtils {
// main方法调用average方法
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
double average = average(array);
System.out.println("平均值:" + average);
}
// 按tab会完成补全average方法
public static double average(int[] array) {
if (array == null || array.length == 0) {
return 0.0;
}
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[i];
}
return (double) sum / array.length;
}
public void arrayFor() {
//在循环上方添加注释:// 使用 Stream 重构
//光标放在循环代码块的任意位置,按 Tab 键 重构
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());
//在循环上方添加注释:// 使用 Stream 重构
// for (int num : numbers) {
// if (num % 2 == 0) {
// evenNumbers.add(num);
// }
// }
}
// 姓名
String name = "张三";
// 年龄
Integer age = 18;
// 地址
String address = "北京";
// 给下面方法添加注释
/**
* 相加
* @param a
* @param b
* @return
*/
private int add(int a, int b) {
//代码添加注释
System.out.println("第一次输出");
return a + b;
}
/**
*
*/
private int subtract(int a, int b) {
return 0;
}
/**
*
*/
private int devide(int a, int b) {
return 0;
}
public void test() {
System.out.println("Hello");
if (true) {
System.out.println("World");
}
}
2、测试@File对话
查询@ArrayUtils.java 罗列其中的方法
3、查看对话结果

1.3.2、@Code使用和测试

1.3.3、@Docs使用和测试
-
@Docs作用说明
@Docs将 Cursor 连接到来自常用工具和框架的官方文档。当需要以下内容的最新权威信息时,请使用它:- API 参考:函数签名、参数、返回类型
- 入门指南 :设置、配置、基本用法
- 最佳做法 :源中的推荐模式
- 特定于框架的调试 :官方故障排除指南
-
@Docs对应文档配置
可以通过
cursor settings -- Indexing & Docs(cursor近期更新频繁,配置页面会有调整)来进行文档索引配置。粘贴所需文档的 URL 后,将显示以下模式:

地址: https://baomidou.com/introduce/ (mybatis-plus的官网测试)
- name:一般用于标识文档的名称、简称或唯一识别名,方便在系统里区分不同文档配置。比如这里填MyBatis - plus,就是用框架名称作为文档标识,后续可通过这个name快速找到、关联对应的文档配置。
- prefix:常指文档 URL 的前缀部分,可用于拼接完整文档路径,或作为统一的基础地址标识。像填的https://baomidou.com ,可能是该框架文档介绍板块的基础前缀,后续若要拼接具体文档子页面路径(如某个功能详细说明路径 ),可以基于这个prefix去扩展,让文档地址管理更规整 。
- entrypoint:一般是文档的入口地址,即用户访问该文档时最先进入的页面。这里和prefix填了一样的地址,说明https://baomidou.com/introduce/ 就是MyBatis - plus文档的起始访问页面,用户通过这个entrypoint能直接进入到对应文档内容开始浏览 。

1.3.4、@Web使用和测试
@Web作用说明
@Web 在实时 Internet 上搜索当前信息、博客文章和社区讨论。当您需要时使用它:
-
最近的教程 :社区生成的内容和示例
-
比较 :比较不同方法的文章
-
最近更新 :Very Recent updates or announcement(最近的更新或公告)
-
多种视角 :不同的问题处理方法

对比@Docs和MCP配置

1.3.5、@Linter Errors使用和测试
1、@Linter Errors作用和说明
@Linter Errors 符号会自动捕获并提供有关当前活动文件中的任何 linting 错误和警告的上下文。
2、准备错误代码(BubbleSort.java)
public class BubbleSort {
/**
* 冒泡排序方法
* @param arr 待排序的数组
*/
public static void bubbleSort(int[] arr) {
int n = arr.length;
// 外层循环控制排序轮数
for (int i = 0; i < n - 1; i++) {
// 内层循环进行相邻元素比较和交换
for (int j = 0; j < n - 1 - i; j++) {
// 如果当前元素大于下一个元素,则交换它们
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
/**
* 打印数组的辅助方法
* @param arr 要打印的数组
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
//此处故意出现错误,会出现数组越界
System.out.print(arr[i+2] + " ");
}
System.out.println();
}
public static void main(String[] args) {
// 测试数组
int[] arr = {64, 34, 25, 12, 22, 11, 90};
System.out.println("排序前的数组:");
printArray(arr);
// 执行冒泡排序
bubbleSort(arr);
System.out.println("排序后的数组:");
printArray(arr);
}
}
3、测试@Lint Errors 对话

二、CurSor应用-Chrome浏览器插件设计
Cursor官网开发指导流程:

2.1 Cursor设计Chrome浏览器插件
1、需求设计
- 创建:sbs_chrome插件需求和要求说明
实现一款Chrome的插件,要包含下面三个功能:
1. 解释选中的段落或者关键词
2. 翻译选中的段落或者关键词(支持中文和英文翻译即可)
3. 朗读选中的段落或者关键字(支持中文和英文朗读)
4. 润色和替换选中的文本文案
细节要求:
1. 当选中段落或者关键词时,出现插件,直接悬浮在选中关键词和段落上!(显示顺序:解释,翻译,朗读,润色)
2. 解释,翻译,润色的结果直接在悬浮下方出现结果即可
3. 翻译添加语言选择(翻译目标: 中文还是英文)
4. 润色结果可以进行修改,同时提供一键替换功能,替换目标文案内容(可编辑情况下可以直接替换)!
5. 翻译、解释、润色功能实用kimi的api实现即可,具体参考配置kimi api文档
6. 朗读直接调用chrome浏览器内置插件即可(提供中文和英文朗读)
7. 并且帮我们写好readme文档,写清在chrome部署插件的过程
2、设计和生成项目UI设计图
- chat agent模式对话:
@sbs_chrome插件需求和要求说明 根据插件需求文档,帮我写一份项目的UI文本设计图,将设计图写到 sbs_ui_chrome插件UI设计图 文件中! 要求页面简洁,清晰!
-
生成 sbs_ui_chrome插件UI设计
# Chrome插件UI设计文档
## 1. 悬浮菜单设计
### 1.1 基础悬浮菜单
```
+------------------------+
| 功能按钮组 |
+------------------------+
| [解释] [翻译] [朗读] [润色] |
+------------------------+
```
### 1.2 功能展示区域
```
+------------------------+
| 功能按钮组 |
+------------------------+
| [解释] [翻译] [朗读] [润色] |
+------------------------+
| 结果展示区域 |
| |
| |
+------------------------+
```
## 2. 各功能界面设计
### 2.1 解释功能
```
+------------------------+
| 功能按钮组 |
+------------------------+
| [解释] [翻译] [朗读] [润色] |
+------------------------+
| 解释结果 |
| 选中的文本解释内容... |
+------------------------+
```
### 2.2 翻译功能
```
+------------------------+
| 功能按钮组 |
+------------------------+
| [解释] [翻译] [朗读] [润色] |
+------------------------+
| 目标语言: [中文 ▼] |
+------------------------+
| 翻译结果 |
| 翻译后的文本内容... |
+------------------------+
```
### 2.3 朗读功能
```
+------------------------+
| 功能按钮组 |
+------------------------+
| [解释] [翻译] [朗读] [润色] |
+------------------------+
| 朗读语言: [中文 ▼] |
| [▶ 开始朗读] [■ 停止] |
+------------------------+
```
### 2.4 润色功能
```
+------------------------+
| 功能按钮组 |
+------------------------+
| [解释] [翻译] [朗读] [润色] |
+------------------------+
| 润色结果 |
| 润色后的文本内容... |
| |
+------------------------+
| [编辑] [替换原文] |
+------------------------+
```
## 3. 设计规范
### 3.1 颜色方案
- 主色调:#4A90E2(蓝色)
- 背景色:#FFFFFF(白色)
- 文字颜色:#333333(深灰)
- 边框颜色:#E5E5E5(浅灰)
### 3.2 字体规范
- 主字体:系统默认字体
- 标题:14px
- 正文:12px
- 按钮文字:12px
### 3.3 间距规范
- 内边距:8px
- 按钮间距:4px
- 功能区间距:12px
### 3.4 交互规范
1. 选中文本后,悬浮菜单自动显示在选中文本附近
2. 点击功能按钮后,结果区域自动展开
3. 鼠标移出悬浮菜单区域,菜单自动隐藏
4. 所有按钮hover效果:背景色变浅
5. 编辑区域支持直接修改,替换按钮一键替换原文
## 4. 响应式设计
- 悬浮菜单宽度:最小200px,最大400px
- 高度自适应内容
- 确保在各种屏幕分辨率下都能正常显示
3、配置和导入kimi docs文档
配置位置: cursor settings > Indexing & Docs > add new doc

4、生成kimi api key
登录kimi api 用户中心: https://platform.moonshot.cn/console/api-keys
创建kimi api key (第一次赠送15元):

2.2 Chrome插件实现
1、准备一个参考界面()
![]()
2、实现插件功能
@sbs_chrome插件需求和要求说明 @sbs_ui_chrome插件UI设计图 基于需求和UI设计图,以@plugin.png 图片风格,直接在当前chrome-plugin文件夹下实现插件功能,同时提取单独配置文件用于填写kimi api url和key的位置!代码添加中文注释,实现后再次自检查,确保插件正常运行和实现功能!
3、配置kimi api key
// API配置
const config = {
// Kimi API配置
kimi: {
apiUrl: 'https://api.moonshot.cn/v1', // 替换为实际的Kimi API URL
apiKey: 'YOUR_KIMI_API_KEY' // 替换为实际的Kimi API Key
},
// 默认设置
defaults: {
translationTarget: 'zh', // 默认翻译目标语言:zh-中文,en-英文
speechLanguage: 'zh' // 默认朗读语言:zh-中文,en-英文
}
};
// 导出配置
export default config;

2.3 Chrome插件调试和发布
1、chrome浏览器--右上角三个点--扩展程序--管理扩展程序--加载未打包的扩展程序--选中项目所在的文件夹
2、第一次回出现问题(使用cursor调试)

将插件文件夹发布到chrome浏览器,报图片的错误,你给我从网上查找几张图片放在对应的位置即可!
将插件文件夹发布到chrome浏览器,报图片的错误,你给我从网上查找几张图片放在对应的位置即可。 很大概率,cursor不给我们生成缺少的图片,安全原因,那么就需要我们自己手动添加!!
3、有错误信息显示
Uncaught SyntaxError: Cannot use import statement outside a module 解决错误信息!
4、插件--详情--扩展程序选项 再次配置Kimi API地址和Key

确保添加完成

功能测试和调试(有问题就让cursor自动修复)
- 翻译

- 解释

- 润色

- 朗读

更多推荐



所有评论(0)