深度使用Cursor一周下来,体验如下:
1、小项目能轻松简单完成,出错较少,小项目中可以使用cursor直接创建基本架构,再调整细节,比如前端的uniapp, 原生小程序、VUE这些;
2、复杂项目不太可能通过几次对话就能实现,最好在已有项目或架构下分解逐步实现功能;
3、对效率提高作用很大,不管是创建代码,调试,还是修改,只要目标清楚基本都能完美解决问题;
4、程序员的时间从写代码转向架构设计,需求描述、调试、修改上。最近完成的两个项目除去原有框架的代码后增加的代码98%是由cursor完成的
5、基本功还是要扎实,技术了解要全面,不然没法向AI提出具体的需求,遇到问题也不知道怎么解决。
使用技巧有很多,重中之重就是提问技巧,其他技巧这里就不探讨了。
Cursor AI提问技巧
-
明确具体:尽量提供详细的问题描述,明确你想要解决的问题或想要实现的功能。
-
使用正确的术语:使用准确的技术术语和关键词,这有助于Cursor AI理解你的需求。
-
上下文信息:提供足够的上下文信息,比如你正在使用的编程语言、框架、库等。
-
示例代码:如果可能,提供一小段示例代码,这样Cursor AI可以更好地理解你的问题和需求。
-
明确期望的结果:描述你期望得到的结果,包括输出格式、性能要求等。
-
避免歧义:尽量避免使用模糊不清的表述,这可能导致Cursor AI理解错误。
-
逐步提问:如果你的问题很复杂,尝试将其分解成几个小问题,逐步提问。
-
反馈和迭代:如果Cursor AI的回答不完全符合你的预期,提供反馈并尝试重新表述问题。
-
利用上下文:如果你之前提过相关的问题,可以在新的问题中提及,这样可以帮助Cursor AI更好地理解问题的连续性。
-
直接提问:如果你想要的是一个直接的答案或解决方案,就直接提问,比如“如何修复这个bug?”或“这个函数的参数是什么?”
-
避免过于宽泛的问题:尽量避免提出过于宽泛的问题,因为这可能导致答案过于笼统。
-
利用命令:如果Cursor AI支持特定的命令或快捷方式,使用它们可以更高效地获取信息。
-
明确限制条件:如果你的问题有特定的限制条件,比如时间、资源或技术限制,确保在提问时提及。
-
清晰的问题结构:组织好你的问题,使用清晰的结构,比如问题背景、具体问题、期望结果。
-
利用示例:如果可能,提供一个具体的例子或场景,这样可以帮助Cursor AI更好地理解问题。
-
保持耐心:有时候,即使问题表述得很清楚,也可能需要一些时间来获得满意的答案,保持耐心。
示例
提问中指明要操作的对象,比如某个文件名,组件名,类名,功能名;要实现的功能描述,功能的举例描述,效果描述
实现效果
前端项目中,要明确向cursor指出哪些数据是由后端提供的,并让他写出接口并按你要去的字段模拟数据,用于测试。
效果
连数据验证都一起做好了,还贴心的给了注释,代码:
// 验证是否可以插入运算符
canInsertOperator(formula, operator) {
if (!formula) return false // 空公式不能插入运算符
const lastChar = formula.trim().slice(-1)
// 特殊处理左括号
if (operator === '(') {
// 左括号前面必须是运算符或公式开始
return ['+', '-', '*', '/', '(', ''].includes(lastChar)
}
// 特殊处理右括号
if (operator === ')') {
// 右括号前面必须是数字、字段结束符}或另一个右括号
return ['}', ')', ...this.numbers].includes(lastChar)
}
// 其他运算符前面必须是数字、字段结束符}或右括号
return ['}', ')', ...this.numbers].includes(lastChar)
},
// 验证是否可以插入数字
canInsertNumber(formula) {
if (!formula) return true // 空公式可以插入数字
const lastChar = formula.trim().slice(-1)
// 如果最后是右括号或字段结束符},则不能插入数字
return !['}', ')'].includes(lastChar)
},
// 获取运算符错误提示
getOperatorError(operator) {
switch(operator) {
case '(':
return '左括号前必须是运算符或公式开始'
case ')':
return '右括号前必须是数字、字段或右括号'
default:
return '运算符前必须是数字、字段或右括号'
}
},
// 检查括号匹配
checkBrackets(formula) {
let stack = []
for (let char of formula) {
if (char === '(') {
stack.push(char)
} else if (char === ')') {
if (stack.length === 0) return false
stack.pop()
}
}
return stack.length === 0
},
// 检查公式是否完整
isIncompleteFormula(formula) {
// 以运算符结尾
if (/[+\-*/]$/.test(formula)) return true
// 以左括号结尾
if (formula.endsWith('(')) return true
return false
},
// 添加检查数字使用是否合法的方法
hasInvalidNumberUsage(formula) {
// 检查是否有连续的数字和字段
const hasNumberFieldSequence = /\d{[^}]+}/.test(formula)
// 检查是否有字段后直接跟数字
const hasFieldNumberSequence = /}[0-9]/.test(formula)
return hasNumberFieldSequence || hasFieldNumberSequence
},
// 获取最后输入的类型
getLastInputType(formula) {
if (!formula) return ''
if (formula.endsWith('}')) return 'field'
if (/[+\-*/()]/.test(formula.slice(-1))) return 'operator'
if (/\d/.test(formula.slice(-1))) return 'number'
return ''
},
AI就像女朋友,你越是懂她,你就过得越滋润。。。