cursor的规则以及使用案例

我爱海鲸 2025-07-12 15:16:00 暂无标签

简介cursor、ai编辑器

安装:http://www.haijin.xyz/article/847

Cursor精准上下文指定

在 Cursor 工具里,“上下文(Context)” 可理解为 让 AI 准确理解需求、辅助编码的 “信息参考范围” ,是 AI 读懂代码、精准响应的关键!

4.1 Codebase Indexing 代码库索引

4.1.1 概念和作用

打开项目时,每个 Cursor 实例都将初始化该工作区的索引。初始索引设置完成后,Cursor 将自动为添加到工作区的任何新文件编制索引,以使您的代码库上下文保持最新:

  • 快速 “读懂” 你的项目结构(哪些是工具文件、哪些是业务逻辑)

  • 定位相关代码(如搜索 getUser 时,知道优先查 userService.js

  • 理解代码关系(如 Order 类和 Product 类的关联)

Cursor 中的作用:AI 分析索引内容后,生成代码时会更贴合项目实际(如使用已有工具函数、遵循命名规范)。

测试示例:

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

#### 忽略文件配置

Cursor 读取项目的代码库并为其编制索引以支持其功能。可以通过将 `.cursorignore` 文件添加到根目录来控制 哪些文件被忽略和Cursor限制访问。

- **提升索引速度**:排除大型依赖、生成文件(如 `node_modules`、`dist`)
- **避免干扰**:某些配置文件可能包含敏感信息或与当前任务无关

配置 `.cursorignore`忽略文件:

* 自己创建 `.cursorignore` 文件添加到代码库目录的根目录下,并列出要忽略的目录和文件

  • 使用cursor配置快捷创建忽略文件 `cursor setting > indexing >  Configure ignored files`

忽略文件配置测试:

  1. 创建忽略文件

2.添加忽略配置

# Add directories or file patterns to ignore during indexing (e.g. foo/ or *.csv)
index.html
style.css
main.js

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

Rules 规则

4.2.1 规则介绍

Rules是给Cursor AI功能(规则适用于 Chat和 Cmd K)生成结果添加规则和限制,让 AI 生成的代码贴合团队规范,减少人工二次修改成本,主要的作用如下:

  • 可约束代码风格(如强制用驼峰命名、要求函数必须写注释 )

  • 能限定技术选型(如禁止使用某老旧库、优先用项目指定工具类 )

  • 提前指定核心参数(如提前设置连接数据库的地址和账号密码等)

Rule主要的配置方案有两种:

维度 项目规则(Project Rules) 用户规则(User Rules)
作用范围 仅对当前项目生效,团队成员共享相同规则 对所有项目生效,个人专属配置
存储位置 项目根目录下的 .cursor/rules/随意.mdc 文件 用户配置目录(如 ~/.cursor/rules
同步方式 随项目代码提交到版本库(如 Git),团队共享 仅本地生效,不随项目同步
适用场景 统一团队编码规范(如函数注释格式、依赖版本) 个人习惯(如快捷键、AI 响应风格)

注意: 项目规则和用户规则同时存在并且规则冲突,项目规则优先级更高~~

项目规则配置

  1. 项目下创建规则文件

    • 创建文件夹自定义文件项目/.cursor/rules/随意命名.mdc

    • 快捷命令方式创建 Ctrl + Shift + P > “New Cursor Rule”

2.编写项目规则文件

---
description: "团队前端项目规范"
priority: 1000
---

# 代码风格
1. 函数必须包含 JSDoc 注释
2. 禁止使用 `var`,统一用 `const`/`let`
3. 函数命名必须添加 hj_前缀, 例如:hj_login

# 依赖管理
- 优先使用项目内已有的工具函数(如 `utils/request`)
- 禁止引入低版本的 lodash(<4.0.0)

3.项目规则文件生效测试

    1. 准备一个main.js文件

    2. 进入ctrl + k

    3. 内联生成函数,查看是否规则生效

      生成两个方法一个登录一个注册!

用户规则配置

  1. 用户规则在cursor settings > rules中定义。

  2. 添加规则内容即可

用户规则不支持 MDC,它们只是纯文本。

mdc语法了解

Cursor 的 MDC(Markdown with Cursor)语法是专门为编写项目规则设计的轻量级格式,它结合了 Markdown 的可读性和元数据配置能力。接下来,我们来说明下mdc文件语法。

MDC 文件组成部分:
  1. 前置元数据(Frontmatter)

    • --- 包裹的 YAML 格式配置

    • 定义规则的基本属性(如作用范围、优先级)

  2. 规则内容(Markdown 正文)

    • 用 Markdown 语法写具体规则

 前置元数据
---
# 官方约定字段(推荐用,AI 更易理解)
description: "前端项目规则"
globs: "src/**/*.tsx"
priority: 1000

# 自定义字段(自己或团队约定含义)
author: "技术团队"
review_date: "2025-06-04"
special_rule: "仅周一至周五生效"
---

常用元数据字段

字段 作用 示例
description 描述规则用途,指导 AI 如何应用规则 "前端组件编码规范"
globs 指定规则生效的文件范围(支持 glob 语法) "src/**/*.{js,ts,jsx}"
priority 规则优先级(数值越大越优先),解决规则冲突 1000
version 规则版本号(可选) "1.0.0"
规则内容(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 框架规范  
完整示例(TypeScript 项目规则)
---
description: "TypeScript 项目编码规范"
globs: "src/**/*.ts"
priority: 1000
---

# 一、基础规范
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  

@ 符号

在 Cursor 中使用 @ 符号在聊天中引用代码、文件、文档和其他上下文的指南,直接更具体的指定上下文环境!

以下是所有可用 @ 符号的列表:

  • @Files- 引用项目中的特定文件

  • @Folders - 引用整个文件夹以获得更广泛的上下文

  • @Code - 引用代码库中的特定代码片段或符号

  • @Docs- 访问文档和指南

  • @Git- 访问 git 历史记录和更改

  • @Past Chats- 使用汇总的 Composer 会话

  • @Cursor Rules-使用光标规则

  • @Web- 参考外部 Web 资源和文档

  • @Lint Errors- 引用 lint 错误(仅限Chat)

@Files使用和测试

  1. 准备测试文件 main.js

/**
 * 用户登录方法
 * @param {Object} params - 登录参数
 * @param {string} params.username - 用户名
 * @param {string} params.password - 密码
 * @returns {Promise} 登录结果
 */
const zwf_login = async (params) => {
  try {
    const response = await request.post('/api/login', params);
    return response.data;
  } catch (error) {
    console.error('登录失败:', error);
    throw error;
  }
};

/**
 * 用户注册方法
 * @param {Object} params - 注册参数
 * @param {string} params.username - 用户名
 * @param {string} params.password - 密码
 * @param {string} params.email - 邮箱
 * @returns {Promise} 注册结果
 */
const zwf_register = async (params) => {
  try {
    const response = await request.post('/api/register', params);
    return response.data;
  } catch (error) {
    console.error('注册失败:', error);
    throw error;
  }
};

测试@File对话

帮我总结下 @main.js 中包含哪些方法?

查看对话结果

@Code使用和测试

准备测试文件 main.js

/**
 * 用户登录方法
 * @param {Object} params - 登录参数
 * @param {string} params.username - 用户名
 * @param {string} params.password - 密码
 * @returns {Promise} 登录结果
 */
const zwf_login = async (params) => {
  try {
    const response = await request.post('/api/login', params);
    return response.data;
  } catch (error) {
    console.error('登录失败:', error);
    throw error;
  }
};

/**
 * 用户注册方法
 * @param {Object} params - 注册参数
 * @param {string} params.username - 用户名
 * @param {string} params.password - 密码
 * @param {string} params.email - 邮箱
 * @returns {Promise} 注册结果
 */
const zwf_register = async (params) => {
  try {
    const response = await request.post('/api/register', params);
    return response.data;
  } catch (error) {
    console.error('注册失败:', error);
    throw error;
  }
};

测试@Code 对话

帮我逐行解释下 @zwf_register 代码的含义!并且最终在源文件中添加注释!

查看对话结果

@Docs使用和测试

  1. @Docs作用说明

    @Docs 将 Cursor 连接到来自常用工具和框架的官方文档。当需要以下内容的最新权威信息时,请使用它:

    • API 参考:函数签名、参数、返回类型

    • 入门指南 :设置、配置、基本用法

    • 最佳做法 :源中的推荐模式

    • 特定于框架的调试 :官方故障排除指南

  2. @Docs对应文档配置

    可以通过cursor settings > features > 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能直接进入到对应文档内容开始浏览 。

测试@Docs对话

基于 @MyBatis-plus 查询下乐观锁插件如何使用

@Web使用和测试

  1. @Web作用说明

    @Web 在实时 Internet 上搜索当前信息、博客文章和社区讨论。当您需要时使用它:

    • 最近的教程 :社区生成的内容和示例

    • 比较 :比较不同方法的文章

    • 最近更新 :Very Recent updates or announcement(最近的更新或公告)

    • 多种视角 :不同的问题处理方法

  2. 测试@Web对话

@Web React 19 的最新性能优化

对比@Docs和MCP配置

@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);
    }
} 

测试@Lint Errors 对话

@Linter Errors 程序运行报错了,你基于报错信息分析下,并且直接解决下错误!

测试结果

Cursor官网开发指导流程:

Cursor设计Chrome浏览器插件

01_chrome插件需求和要求说明

实现一款Chrome的插件,要包含下面三个功能:
   1. 解释选中的段落或者关键词
   2. 翻译选中的段落或者关键词(支持中文和英文翻译即可)
   3. 朗读选中的段落或者关键字(支持中文和英文朗读)
   4. 润色和替换选中的文本文案
细节要求:
   1. 当选中段落或者关键词时,出现插件,直接悬浮在选中关键词和段落上!(显示顺序:解释,翻译,朗读,润色)
   2. 解释,翻译,润色的结果直接在悬浮下方出现结果即可
   3. 翻译添加语言选择(翻译目标: 中文还是英文)
   4. 润色结果可以进行修改,同时提供一键替换功能,替换目标文案内容(可编辑情况下可以直接替换)!
   5. 翻译、解释、润色功能实用kimi的api实现即可,具体参考配置kimi api文档
   6. 朗读直接调用chrome浏览器内置插件即可(提供中文和英文朗读)
   7. 并且帮我们写好readme文档,写清在chrome部署插件的过程

https://platform.moonshot.cn/docs

设计和生成项目ui图文本

chat agent模式对话:

@01_chrome插件需求和要求说明 根据插件需求文档,帮我写一份项目的UI文本设计图,将设计图写到 02_chrome插件UI设计图 文件中! 要求页面简洁,清晰!

生成 02_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
- 高度自适应内容
- 确保在各种屏幕分辨率下都能正常显示 

配置和导入kimi docs文档

配置位置: cursor settings > Features > Docs > add new doc

生成kimi api key

登录kimi api 用户中心: https://platform.moonshot.cn/console/api-keys

创建kimi api key (第一次赠送15元):

Chrome插件实现

准备一个参考界面(参考豆包)

实现插件功能

@01_chrome插件需求和要求说明 @02_chrome插件UI设计图   基于需求和UI设计图,以及参考 @doubaoui.png 图片风格,直接在当前chrome-plugin文件夹下实现插件功能,同时提取单独配置文件用于填写kimi api url和key的位置!代码添加中文注释,实现后再次自检查,确保插件正常运行和实现功能!

配置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; 

Chrome插件调试和发布

第一次回出现问题(使用cursor调试)

将插件文件夹发布到chrome浏览器,报图片的错误,你给我从网上查找几张图片放在对应的位置即可!

有错误信息显示

Uncaught SyntaxError: Cannot use import statement outside a module

Uncaught SyntaxError: Cannot use import statement outside a module 解决错误信息!

确保添加完成

 

你好:我的2025