Cursor Cmd-K 内联编辑一直转不出 diff

按了 Cmd-K 写完指令,弹窗 spinner 一直转,不出 diff、不报错、提交不了。多半是网络、模型、或上下文。四类根因走一遍。

选中一段代码,按 Cmd-K,输入「把这段抽成一个函数」,弹窗就开始转。20 秒、40 秒、一分钟,没 diff、没报错、也没法提交。再按一次 Cmd-K 要么弹窗叠加、要么没反应。Cmd-K 流程其实比 Composer 和 Agent 都简单——单轮请求让模型回 unified diff——所以它卡住几乎只有这四种原因:模型 API 静默超时;选区加上下文把模型窗口撑爆了;上一次 Cmd-K 留下的 streaming socket 没清;选的模型本身有 bug(一些旧 preview 模型在长输入时不回 diff 格式)。

常见原因

按命中率从高到低。

1. 模型 API 请求静默超时

Cursor 后端给 Cmd-K 的单次预算大约 60 秒。上游模型(Anthropic、OpenAI、自定义)超时没回,响应就根本不来。弹窗一直转,因为 Cursor 没收到任何 error 帧。

怎么判断:在一个小文件里用 Cmd-K 改一行小修改。也卡——就跟你的上下文无关,是请求通道的问题。

2. 选区 + 上下文超出模型窗口

Cursor 会把选区加上周围一窗的代码(有时还有相关文件)一起发。4000 行的文件再开 @codebase,prompt 容易直接撑爆输入上限。有的模型 truncate,有的直接挂。

怎么判断:在 50 行的 scratch 文件里跑同一个编辑。那里能跑、大文件不行——就是上下文大小问题。

3. 上次 Cmd-K 留下的 socket 还半开着

上一次 Cmd-K 中途取消,底层 socket 可能停在半关状态。下一次请求复用了死 socket,永远完不成。

怎么判断:Cmd+Shift+P → 「Developer: Reload Window」。下一次 Cmd-K 能跑,就是它。

4. 选的模型 degrade 了,不回 diff 格式

某些模型版本(早期 Claude Haiku、已弃用的 OpenAI preview)会回散文而不是 Cursor 期望的结构化 diff。Cursor 死等永远不来的 diff。

怎么判断:设置 → Models → 切到已知稳定的,比如 claude-sonnet-4.6gpt-5.5。重新 Cmd-K,能跑——模型的问题。

5. 网络代理或防火墙在 buffer 响应

公司代理会把整个响应攒完再转发,stream 被攥到完成或超时为止,弹窗看起来挂了,其实请求还在飞。

怎么判断:关代理或关 VPN 重试。秒回,就是 proxy 在 buffer。

6. Cursor 账号偷偷撞到 rate limit

会话中途快速请求配额用完了,某些 Cursor 版本会排队但不显示等待。弹窗看起来卡了,其实在排队。

怎么判断:Cursor Settings → Usage。「Fast requests used」到上限了——就是排队。

开始前

  • 先保存文件,万一编辑最终落下来,别把别的改动丢了。
  • 弄清楚 Cmd-K 选的是哪个模型(可以和 Composer 不一样)。
  • 准备一个小 scratch 文件,便于隔离「上下文太大」这条。

需要收集的信息

  • Cursor 版本(Help → About)。
  • OS。
  • Cmd-K 当前选的模型(输入框旁边的下拉)。
  • 卡住时的文件大小、选区大小。
  • prompt 里有没有用 @codebase@file
  • 网络环境:VPN、代理、公司防火墙。
  • ~/.cursor/logs/ 最新日志里匹配 cmdkinline 的那条。

一步一步修复

Step 1:取消 + reload 窗口

按 Escape 关弹窗。Cmd+Shift+P → 「Developer: Reload Window」。把残留 socket 清掉。再 Cmd-K 同一段试试。

Step 2:缩小选区、缩短指令

选 10 行别选 200 行,输 3 个词的指令别输一整段。秒回——原请求要么太大要么太含糊,把改动拆成两次 Cmd-K。

Step 3:换 Cmd-K 模型

Cmd-K 弹窗里点模型下拉。原来是别的就换成 claude-sonnet-4.6gpt-5.5。某些 preview 模型对 Cmd-K 特别脆。

Step 4:看状态页

打开 status.cursor.com 和你用的上游 provider 的状态页。任一在 degrade,所有 Cmd-K 都会挂。本地修不了——等或换 provider。

Step 5:临时绕开代理

公司网络的话,切手机热点或关 VPN 重试。5 秒出 diff,就是 proxy 在 buffer。长期方案是让 IT 把 api.cursor.sh 和你的模型 provider 加到 streaming 允许列表。

Step 6:查 fast request 用量

Settings → Usage。超 fast 上限了,等重置、升级套餐、或者把 Cmd-K 模型切到走 slow request 的(能用,只是排队方式不同)。

Step 7:完全重启 Cursor

Cmd+Q 完全退出(关窗口不算,进程还在)。重开、回到同一个文件、再试。新进程能把「Reload Window」清不掉的状态也清掉。

怎么验证修好了

  • 在 5 行选区上用 3 个词指令跑一次 Cmd-K,10 秒内回结果。
  • 在 100 行选区上跑一次,30 秒内回结果。
  • 再试一次最初卡住的 prompt。能回就好;还卡就是 prompt 本身太含糊,重写得更具体。
  • 走完一次 Cmd-K 完整流程:preview → accept。

长期预防

  • 「Cmd-K model」固定选一个稳定的生产模型,别用 preview。
  • 文件超过 2000 行就别用 Cmd-K,用 Composer——Composer 处理长上下文好得多。
  • Cmd-K 里别用 @codebase,它是给 Composer 准备的,会让 inline 请求膨胀。
  • 长时间用 Cursor 期间定期 reload 一下窗口,socket 会累积。
  • 在公司代理后面工作的话,争取 IT 给个允许列表,别天天跟 buffering 斗。

容易踩的坑

  • 第一次还在转就按第二次 Cmd-K。两个请求同时在飞,哪个都收不干净。
  • 选中整个 3000 行文件做全局重构。Cmd-K 是给小修小补用的,要全局走 Composer。
  • 一个 prompt 里塞好几条指令。Cmd-K 一条清晰指令最稳。
  • 把 spinner 当进度。它不是——只是个等 HTTP 响应的 UI,响应可能永远不来。
  • 不看弹窗里的模型下拉。每次 Cmd-K 默认可能不一样。

常见问答

  • Cmd-K 是干嘛的? 选一段 + 一条短指令,回一个 inline diff,可以不离开编辑器直接 accept 或 reject。
  • 跟 Composer 有什么区别? Cmd-K 是单轮,紧贴选区;Composer 多轮,可以跨文件改,对话里能维持上下文。
  • 重试时 prompt 会丢吗? Escape 后再 Cmd-K,按上箭头能回到上一次的 prompt。
  • Cmd-K 算 fast request 配额吗? 算,每次 Cmd-K 都是一次。
  • 有没有快捷键能取消卡住的 Cmd-K? Escape 只是关弹窗。没有「取消并释放请求」——底层 HTTP 可能还在飞到服务端超时。

相关

标签: #Cursor #排查 #AI 编程 #排查