Cursor 食用指南(也许能解决许多佬友的问题)

如若搬运,请尊重原作者,保留出处,这是为人的基本道德。

帖子更新时间:2024-12-28 13:00

作为一个AI领域的从业者,同时也是AI 辅助编程的深度用户。

下面这几句话是我认为你最需要知道也是对你最有帮助的,哪怕不看下面的技巧,我也推荐你花几秒钟看看。

一、LLM 上下文是受限的,且上下文越多,它越难捕获到你的意图。
二、LLM 输出是严重受限的,目前常用的最多为 8192 Tokens。
三、无论是Cursor、Windsurf、Copilot还是Cline,它们都只是你的助手,请全程参与并把握主导权和决策权。

当前Cursor最新版本 0.44.9

Cursor 使用技巧

1 Agent 模式使用技巧

1.1 搜索代替指定

理由:强制触发 cursor agent模式里面的搜索功能,它搜到的片段 + 上下文,比你手动指定多个文件给他得到的结果会好很多(因为你指定文件的话,它只会读取开头一两百行,可能都读不到你想要它修改的函数,然后这时候上下文又会多一大堆没用的干扰信息,也就是会出现各位所说的变傻)

  • 移除 context 指定,触发 agent 模式的自动搜索
  • 同时改为在描述中提供:
    • 明确的方法名
    • 关键类名
    • 相关变量名
    • 具体功能描述

1.2 文档处理

理由:文档是额外信息,chat中请只保留最关键的指示信息和引导信息。过多的信息会干扰模型对你需求的理解。

  • 避免直接粘贴

    • 不要在编辑框直接添加大量文档
    • 使用文档配置功能
  • 文档指定

    • 仅为项目共享必要的数据,而不是所有项目的文档均共享。
    • 推荐仅添加训练数据无法覆盖的内容,如:较新的库文档、开发接口文档等。
    • 文档自己写最好(要求就是精炼,和强烈的个人编码风格),仅提供方法使用教程,简短文字描述,便于切片和索引。
  • 文档链接配置方式

    https://github.com/username/repo/blob/main/docs/doc.md
    
    • 使用 GitHub 仓库存储文档
    • 也可使用云存储服务(如阿里云 OSS)
  • 本地文档指定
    在cursor设置中开启


    在左侧边栏中底部Notepads中添加文档。

1.3 上下文管理

理由:cursor是一个助手,而不是决策专家,有时候人动动脑子做个决策就是它望尘莫及的了。

  • 避免提供过多文档导致上下文溢出
  • 确保关键指令不被忽略
  • 优先提供必要的上下文信息
  • 不要幻想一个chat解决所有问题,学会将问题分解,解决一个问题使用一个chat。

1.4 Lint 配置

理由:部分项目会导致额外的矫正,浪费时间,大部分情况下人一眼看过去就知道是什么问题了

  • 建议关闭自动 lint
  • 需要时使用 @lint 手动触发
  • 避免过度自动化带来的干扰

1.5 前端同学须知

  • 当你费劲口舌跟它辩论UI有什么bug,不如甩给它一张界面截图,也许你会有意外的发现。

1.6 cursor rule

  • 善用 cursor rule,可以在项目根目录创建 .cursorrules 文件,cursor在chat/composer中均会参考此文件定义。
  • 在 cursor rule 中指定项目所有用到的库(必要的)、UI风格、编码规范、项目模块定义等。

2 常见问题处理

  • 出现锟斤拷乱码怎么办?
    错误示例(来自评论区):
    image
    请使用全局 utf-8 。


    中英日三文混杂,修改46处,均无乱码。
    image
    附上给定乱码,其自动修复为正确内容截图。
    image

  • 搜索不准确

    • 提供更精确的关键词
    • 使用完整的方法名/类名
  • 如何使用agent模式?
    image
    如果你的版本支持,那么composer页面或弹窗下面的聊天框右下角会有如下选项(normal和agent),选中agent时为白色,且鼠标悬浮会提示你正在使用agent模式。

  • checkpoints 不会回退?
    image
    每个checkpoints旁边均有一个restore按钮,点击即可回到当时的状态。

  • checkpoints 太多不知道回退到哪,也适用于没有checkpoints没有restore按钮的版本?


    如果你发送了A消息,cursor帮你做了1、2、3件事情,这些事情你都不想care了。那么你只需要双击A消息,再点一次submit,然后会有如上弹窗提醒,选中continue and revert即可,然后cursor会再根据你的A消息重新发送请求,如果不需要就点界面中的cancel取消即可。

  • 如何为composer配置自定义(自己提供Key)模型?
    可以。但只能官Key。
    非官key,中转站呢?没有办法。cursor的composer不会使用用户配置的自定义endpoint。如有这个需求,请试试Cline,这是一个非常好用的agent(缺点:无checkpoints,行级处理导致无法一次ctrl+z撤销,也就是会在timeline留下很多修改过程中的脏版本,这是我对我来说最不喜欢的一点)。

  • 实现新功能,但代码散落在多个文件?
    不需要提供context,只需要在agent模式下的聊天框中提供文件名和涉及到的必要的接口描述以及新功能描述即可(非必要请勿指定context,特别是文件几百上千行时)。

  • 如果我想让AI总结项目,生成开发指南,但不想让他修改代码该怎么办?

    • 首先,我们要明确一点,LLM上下文和输出都是受限的,所以寻常的Chat模式必定是无法使用的,因为你不可能将所有代码一次性全部提供给它,它也不可能给你生成几万行的开发指南。
    • 所以,我们需要使用具有agent功能的工具,如:cursor compose里面的agent模式,或者cline工具,这些工具本质上是由一个决策者和多个执行者组成,决策者负责制定完成任务所需要进行的操作步骤,再交由执行者去执行,决策和执行都是单独的一次Chat。
    • 那么,思路就很简单了。1、拿到项目文件目录接口,由决策者生成阅读指南,相当于你的leader教你如何阅读项目。2、让执行者根据决策者生成的阅读指南,逐个文件阅读并生成文件内容概要、函数接口概要,将阅读结果保留到/docs目录下的项目同结构md文件下(如:src/hello/prompt.py(提供一些prompt常量) => docs/src/hello/prompt.md,src/hello/fillPrompt.py(提供一些工具函数,来操作prompt里面定义的变量等信息) => docs/src/hello/fillPrompt.md)。3、所有的执行者阅读完后,再交由思考者,逐个文件夹总结归纳(例如:docs/src/hello/下有prompt.md和fillPropmt.md,对齐总结归纳后会得到docs/src/hello.md),如此循环递归向上,直到得到最终的docs.md,这便是我们所需要的项目开发指南。
    • 实现:(待续,内容有点多,有需要再继续写)如果你使用cline,那么请你创建一个MCP工具,用于获取项目目录和文件结构,并需要能标注和获取已经浏览和归纳总结过的文件。

希望对你有所帮助。
如有其他问题,欢迎各位提问或补充。

348 Likes

谢谢佬友分享
但我认为高版本的Cursor从0.43开始更新这么多不实用的功能,不如用0.42.6的支持长上下文的模型效果来的好

6 Likes

插眼,我也在考虑要不要换到0.42.x版本

6 Likes

其实如果大家能意识到我开头讲得三点,那么很多问题都是有解决方案的。

并且高版本提供了更多的功能(虽然也带来了一些抉择)。

比如:checkpoints、agent、多agent共享记忆等。

其中显式checkpoints对我而言是最有用的,因为我可以肆无忌惮的就一个功能实现进行任意轮次对话,直到我满意为止,或者不满意,我可以直接checkout到我一开始进行的对话之前的状态,而不用担心任何代码的错误变动。

而对于没有提供checkpoints功能的工具,如cline。

我就得使用git分支管理,一个功能修改我必须先checkout到一个新分支,然后每次修改前做一次提交备份数据,在它修改后再提交再备份,如此手动循环修改、备份、不满意回退,这对我而言是非常低效的。

6 Likes

技巧一定是有用的,特别是对于这类AI工具。但是Cursor现在经常会产生错觉,我个人认为是上下文窗口的问题,即使用@来指定文件也存在,但是新出的极速模式确实很适合用来让AI来调试用,只能说目前需要根据自己的需求取舍。

3 Likes

也许我在文中已经有所强调

另外,如果要手动指定context,请切换回normal模式,效果会比你用agent模式强上不少。但还是不建议在一个Chat里面提供过量的上下文信息。

6 Likes

是的 如果具有自己定位问题的能力的话当然不成问题
但是因为个人水平有限 很多时候没法精准的定位到问题出现的原因 所以只能依靠AI自查
当然也不是否定佬友的方法

3 Likes

这么好的帖子,很难不顶啊,点赞收藏了,结合另一篇Cursor使用心得 感觉收获颇丰

我的Cursor使用心得——项目实现

9 Likes

不错不错,先马克,再细细学习

3 Likes

非常有用的分享,之前使用cursor时总是把握不好尺度,小问题有时候tab补全就出来了,大问题又不知道怎么描述,有时候功能分散在好几个文件里感觉mention也不太好用,不知道如何描述让他去解决。
我使用cursor的场景主要是fork别人的项目代码,然后在此基础上魔改或者拼凑(苦逼的研究生),有些人写的代码还挺规范。但碰上有些项目代码,我作为人类都难以定位到功能实现的地方并上手更改(当然可能是我能力比较菜),不知道cursor能否直接来做?

5 Likes

谢谢大佬总结

3 Likes

look

4 Likes

感谢佬友的总结分享!非常有用!

3 Likes

谢谢大佬,先make,再慢慢学习

3 Likes

佬,请问如何强制触发 cursor agent模式

4 Likes

如果你的版本支持,那么composer页面或弹窗下面的聊天框右下角会有如下选项(normal和agent),选中agent时为白色,且鼠标悬浮会提示你正在使用agent模式。
image

3 Likes

我的cursor是最新版本,但确实没有(normal和agent)

3 Likes

学到了 ,谢谢佬友分享

2 Likes

不好意思,找到啦,非常感谢佬友的分享。

2 Likes

也许你是在chat模式?
image
手动切换到composer页面,或者使用快捷键 ctrl + i。

2 Likes