Cursor

一、下载安装

下载和安装好像是很傻瓜的,在官网下载了直接安装包点点就ok了,然后在官网注册一下账号并且登录到应用就可以了

官网地址:https://cursor.com/cn

二、配置

看起来就是类似vscode的应用,甚至还有一键从vscode导入设置的选项,但是本地电脑没咋用vscode写前端所以没啥可以迁移的

像vscode一样在插件市场安装了一个中文插件将软件汉化,名字是Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code

然后有一个是要配置一下java的开发环境

设置我的JAVA_HOME和MAVEN_HOME,在setting.json中添加了如下内容吗,然后好像是重启就可以辽

{
"java.home": "F:/java/jdk/jdk-11.0.23",
"java.configuration.maven.userSettings": "F:/maven/apache-maven-3.9.6/conf/settings.xml"
}

还有一件事,要安装java的开发支持,比如代码提示之类的,就是把vscode变得像idea一样提示一些内容

插件市场中搜索Extension Pack for Java,安装他下面的一些插件然后等待重启ide

准备工作就完成啦

三、Cursor核心ai功能

3.1 Tab

3.1.1 Tab智能补全

先提出需求,tab自动补全,补全时支持跨行,例如:

// 需求:写一个工具类计算数组平均值
public class ArrayUtils {
public static double calculateAverage(int[] array) {
if (array == null || array.length == 0) {
throw new IllegalArgumentException("Array cannot be null or empty");
}
double sum = 0;
for (int num : array) {
sum += num;
}
return sum / array.length;
}

public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5};
double average = calculateAverage(array);
System.out.println("Average: " + average);
}
}
3.1.2 智能代码重写

已有片段代码:

public void arrayFor() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = new ArrayList<>();
for (Integer num : numbers) {
if (num % 2 == 0) {
evenNumbers.add(num);
}
}

}

添加注释内容:使用Stream重构

// 使用Stream重构
public void arrayFor() {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());
System.out.println(evenNumbers);
}
3.1.3 多行协同优化

多行数据联想

int count;	// 普通变量
String name; // 姓名
boolean isValid; // 是否有效
double price; // 价格
// tab 可以继续联想变量类型

int count; // 普通变量
String name; // 姓名
boolean isValid; // 是否有效
double price; // 价格
int[] numbers = {1, 2, 3, 4, 5};
int age;
String address;
boolean isStudent;
double salary;
String email;
String phone;
String city;
String state;
String country;
String zip;

多行批量修改

public static int add(int a, int b) {
// 代码添加注释
//
System.out.println("第一次输出");
//
System.out.println("第二次输出");
//
System.out.println("第三次输出");
//
System.out.println("第四次输出");
return 0;
}

public static int add(int a, int b) {
// 代码添加注释
// 第一次
System.out.println("第一次输出");
// 第二次
System.out.println("第二次输出");
// 第三次
System.out.println("第三次输出");
// 第四次
System.out.println("第四次输出");
return 0;
}
3.1.4 光标位置预测

准备测试代码

// 给下面方法添加注释
/**
* 计算两个数的和
*/
public static int add(int a, int b) {
return 0;
}

/**
*
*/
public static int subtract(int a, int b) {
return 0;
}

/**
*
*/
public static int multiply(int a, int b) {
return 0;
}

/**
*
*/
public static int divide(int a, int b) {
return 0;
}

// 给下面方法添加注释
/**
* 计算两个数的和
*/
public static int add(int a, int b) {
return 0;
}

/**
* 计算两个数的差
*/
public static int subtract(int a, int b) {
return 0;
}

/**
* 计算两个数的积
*/
public static int multiply(int a, int b) {
return 0;
}

/**
* 计算两个数的商
*/
public static int divide(int a, int b) {
return 0;
}
3.1.5 接受、接受部分和拒绝

准备测试类

public class Student {
private String name;
private int age;
// tab
// tab 接受完整补全
// ctrl + -> 部分和逐步接受补全
// esc或者继续输入拒绝补全
}

若使用部分接受需要在cursorSetting中开启Partial Accepts功能

还有一些其他的功能和相关设置,比如有个总开关,还有个是否在注释中使用tab功能,还有个如果只是空格换行这些格式问题需不需要tab修正的功能,自动引入包这些

3.2 Chat对话

添加具体需求,如开发语言、等内容,分点描述,在后续修改要说明必须保留的内容或者禁止的实现方式

请生成一个学习计划页面的html+css+javascript实现
[具体要求]:
1.使用Taiwind Css v3he font awersome
2.包含任务添加、编辑、删除功能
3.包含日历视图展示学习计划
4.包含学习进度可视化图像
5.符合现代ui设计原则和响应化设计
6.具有平滑的动画和交互效果

之后就一步一步搞就可以了,没啥好说的好像

3.2.1 chat三种模式

Chat提供针对特定任务的不同模式

  1. Agent代理模式:默认此模式,允许cursor学习和理解我们的项目代码,并且可以直接进行项目代码更改

  2. Ask对话模式:获取项目代码相关的解释和答案,但是不会直接修改项目代码

  3. Plan(记得以前是manual)还没研究

3.2.1.1 Agent
使用html、css、js实现一个贪吃蛇页面
要求:
1.要求有积分统计
2.要有多种北京可以切换
3.代码添加中文注释
4.不能使用var,只能使用let和const声明变量

其实就是提需求就ok了

然后还有几个小设置,一个是model,是选择agent模型,一个是keybinding,就是其他模式下快速切换到agent模式的一个快捷键,还有一个auto-run就是像创建文件或执行命令之类的可以自动执行这样

3.2.1.2 Ask

Ask默认不应用任何建议的更改,但是还是有读取文件和上下文的完整能力,可以通过应用其建议对文件和代码进行操作,也可以切换成agent让他帮忙做,可以在实施前进行代码规划这样

这个贪吃蛇页面如何添加多种模式

根据回复进行修改或者切换成agent让他来帮忙修改文件就可以了

3.2.1.3 plan

没看明白,记得以前这个是manual,找时间再看看

3.2.2 其他小细节

每一次请求都有一个回滚点,可以回滚到这次修改之前的文件状态;

还有一个历史会话的按钮,可以继续某个历史会话

3.3 ctrl+k 内联智能修改

在编辑器某处点击ctrl+K,打开一个小弹窗,可以的对某些小区域进行只能修改

新建一个main.js文件,点击ctrl+k打开弹窗

生成一个带点击动画的按钮组件,用js实现,点击后控制台打印点击次数

开始自动生成,之后可以在方法处点击一下移动光标,之后再点击ctrl+k,输入为每行代码添加注释,则自动处理内容添加注释

四、 Cursor精准上下文指定

4.1 Codebase Indexing 代码库指定

其实就是打开项目后cursor会初始化该工作区的索引,设置完成后将自动为天机道工作取得任何新文件编制索引,保持代码库上下文保持最新

目的就是快速读懂你的项目结构,哪些是工具文件,哪些事业务逻辑;

然后快速定位相关代码,比如搜索getUser时知道先去看userService;

理解代码关系,如Order类和Product类的关联

可以帮助cursor在生成代码时更符合实际,比如命名规范、已有工具函数这些

在项目中可能会有一些不需要去索引的东西,比如node_modules或者target这些,那就要设置一下忽略文件避免干扰和提升索引速度

在当前项目中添加一个.cursorignore文件,在其中列一下文件和目录就ok了

4.2 Rules规则

Chatctrl+k生成的内容添加规则和限制,让生成的代码贴合团队规范,比如约束代码风格(强制驼峰命名,必须注释),限定技术选型(禁止使用某些老旧库,优先用指定工具类),提前指定核心参数(设置连接数据库的地址和账号密码)

规则有项目规则(只对当前项目生效,所有人共享规则)和用户规则(当前用户登陆后对所有项目生效)

项目规则:存放在.cursor/rules/随意.mdc文件,随项目代码提交到版本库(如git)

用户规则:用户配置目录如~/.cursor/rules,仅本地生效

若规则同时存在并且冲突,项目规则有限度更高

4.2.1 项目规则

ctrl+shift+p输入new cursor rule
输入文件名,发现自动创建.cursor/rules/文件名.mdc文件,就是创建了一个规则,可以创建很多规则
例如:

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

# 代码风格
1. 函数必须包含JSDoc注释
2. 禁止使用var,统一用const/let
3.函数名必须添加 cyk_前缀,例如cyk_login
# 依赖管理
优先使用项目内已有的工具函数,如utils/request
禁止引入低版本的lodash(<4.0.0)
4.2.2 用户规则

cursor setting > rules中定义

直接添加规则内容即可

4.2.3 拓展 mdc语法

Markdown with Cursor就是mdc

  1. 前置元数据
    • ---包裹的yaml格式配置
    • 定义规则的基本属性,如作用范围、优先级
  2. 规则内容(markdown正文)
    • 用markdown语法写具体规划
---
# 官方约定字段
description: "前端项目规划"
globs: "src/**/*.tsx" # 生效范围,支持glob语法
priority: 1000 # 优先级,值越大越高
version: 1.0.0 # (可选)规则版本号

# 自定义字段
author: ""
review_date: "2025-10-29"
special_rule: "仅周一至周五生效"
---

规则内容常见结构:

  • 代码风格约束规则
# 代码风格
1. 函数必须包含JSDoc注释
2. 禁止使用var,统一用const/let
3. 函数名必须添加 cyk_前缀,例如cyk_login
  • 安全约束规则
# 安全规范
1. 禁止使用eval()函数
2. SQL查询必须使用参数化查询,防止注入攻击
  • 特殊语法:引用项目文件

@file引用项目内的配置文件,让ai参考

# 工具链配置
1. ESLint 规则必须符合 @file .eslintrc.js
2. 测试用力必须遵循Jest框架规范
4.2.4 拓展 @符号

**@File**:就是指定一个文件,可以指定文件后让cursor解释其中内容

**@Code**:可以指定某段代码,比如@cyk_login 解释这段代码

**@Doc**:指定文档内容,需要先在cursor setting中配置文档地址和名称,配置好后可以直接@name 并提问其中内容

**@Web**:直接从网络寻找内容,比如询问最新更新,询问某些内容比较等

**@Linter Errors**:程序代码报错后,直接在对话区域输入@Linter Errors 解决错误信息,会自动查找运行报错报错内容并自动解决

如果某个框架有官方文档,那配置相关的内容建议直接@Doc

五、写个插件

编写文件:01_chrome插件需求和要求说明

实现一款Chrome的插件,包含下面几个功能:

1. 解释选中的段落或关键词
2. 翻译选中的段落或关键词(中文和英文即可)
3. 朗读选中的段落或关键词(中文和英文即可)
4. 润色和替换选中的文本文案

细节要求:

1. 选中内容时,出现插件,直接悬浮在选中内容上(功能排列顺序为:解释,翻译,朗读,润色)
2. 解释,翻译,润色结果直接在悬浮下方出现结果
3. 翻译添加语言选择(翻译目标:中文/英文)
4. 润色结果可以进行修改,并且可以对页面内容一键替换(可编辑的情况下)
5. 翻译,解释,润色使用kimi的api实现即可,具体参考kimi api文档
6. 帮我写好readme文档,描述插件部署安装过程和使用说明

提出指令

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

@02_chrome插件UI设计图 @01_chrome插件需求和要求说明 基于需求喝设计图,以及参考 @plugin.png 图片风格,直接在当前chrome-plugin文件夹下实现插件功能,同时单独提取配置文件用于填写kimiapiurl和key的位置,实现后请自检查保证插件正常运行和实现功能

图标文件也帮我补充,同时调整文件目录结构,让其可以直接添加到chrome插件中

最后加载插件验证功能通过

完结