一文搞清楚Cursor的Tab到底强大在哪里

avatar
@海尔优家智能科技(北京)有限公司

前言

从AI能力开始跟IDE融合开始,我就一直在使用Cursor,它非常好用,以至于我根本就不想尝试其他解决方案。但是为什么会感觉它非常好用,我却一直没想清楚。论代码补全、问答、Agent,好像copilot、灵码等解决方案,通过IDE插件的能力就能支持,但为什么大家普遍反馈Cursor用起来更丝滑呢?问题的关键就在于Tab键,本文就来分析一下,Cursor的Tab到底强大在哪里。

1. 软件能力和模型能力

首先我们要搞清楚,AI能力跟IDE的融合实际上给传统编辑器在两个能力上做出了优化,一个是软件能力,是指你手动写代码时的编辑体验;另一个是模型能力,是指让大模型帮你分析代码、写代码。

实际上,我们之所以搞不清楚为什么Cursor用起来很丝滑,就是因为我们往往忽略了软件能力这一方面的提升。因为,对于我们最先接触的AI IDE插件来说,它受限于IDE本身的灵活性,它无法在软件能力层面上做出很大的优化,而只能在模型能力上下功夫。

所以,这就导致我们衡量AI对编程效率提升的标准,普遍变成了大模型有多少参数,是否有多模态,是否有充足的上下文等模型层面的能力。而这些能力,对于“写代码”的体验上,其实没有多少贡献,因为它们都属于“AI帮你写代码”。

2. 软件能力才是AI IDE的核心竞争力

大模型技术已经进入到了瓶颈期,Grok3的训练使用了约20万块英伟达H100 GPU ,2亿GPU小时,才换来了相对于DeepSeekV3的20%的提升, 相比之下,DeepSeekV3使用了约2048块H800 GPU,278.8万GPU小时 所以短期内很难有人在模型能力上在做大的突破。在这个状态下,现在模型能力对所有IDE来说都是平等的,那么一个AI IDE如何脱颖而出,就是要靠其软件能力。

软件能力可以分成两个方向,一个服务于代码编写的软件能力,一个是服务于模型能力的辅助能力。刚听完的灵码的分享,他们在IDE插件后面提供了一个后台,后台里可以预先配置企业文档,从而为大模型提供更充足的上下文。所以,这种软件能力属于后者,对于我们实际的编码体验来说,基本上没有变化。但即便如此,我相信灵码的这些服务于模型的软件能力,也已经解决的企业用户的大量痛点,形成了自己的核心竞争力。

那么,什么样的软件能力,才是真的服务于编码体验的呢?Cursor给出了答案。

3. 对AI IDE的抵触心理

我经常给我的朋友推荐Cursor,但是很多人觉得,自己所用的技术栈都是企业定制的,而大模型的训练资料都是开源的代码,所以他们不认为AI IDE能够帮助到自己。

这种抵触心理实际上是因为,他们进入到了我前面所说的“软件能力”和“模型能力”的认知误区上。他们觉得,模型能力就是AI IDE的全部,如果模型不能解决企业私有框架的问题,那么AI IDE又有什么用呢?反而徒增使用成本,甚至降低开发效率。

然而事实上,就算完全抛开基于大模型的对话和Agent能力,就单纯的在AI IDE里去手写代码,你也会感受到AI给你带来的巨大效率提升。你甚至会觉得不可思议,它竟然如此精准的知道你想敲的下一个字符是什么,你想跳转的下一行是哪一行。

这种不可思议,只有在Cursor这种针对AI编程进了极致体验优化的独立AI IDE中才能体会到。

4. 为什么Cursor的Tab键那么好用

实际上,AI IDE早已经实现了责任范围的进化:

AI IDE实际上拥有你整个代码仓库的token信息,你当前光标在哪个代码块里,你之前写的代码是什么,你可能想要写什么,AI都是可以知道的。同时,因为是独立的IDE,它能够有足够的自由去实现最极致的编程体验。所有这些,最终都汇聚到一个能力上,那就是Tab补全

可能有人会问,我的IDE插件也有Tab补全,它们有什么区别吗?可以说,它们有本质的区别,下面我们用一个最简单的例子,展示它们的区别。

我们使用Cursor和灵码VSCode插件分别准备好下方的代码:

class DepManager {
  deps = new Map();
  addDependency(source, target, procs, procName) {
    this.deps.set(source, { target, procs, procName });
  }
}
class DistProc {
  execute(source, target) {
    return source.position.distanceTo(target.position);
  }
}
class ParallelProc {
  execute(source, target) {
    // todo: 计算平行约束
  }
}
class Plane {
  constructor(position, normal) {
    this.position = position;
    this.normal = normal;
  }
}
class Box {
  procs = new Map();
  constructor(depManager) {
    this.depManager = depManager;
    this.left = new Plane();
    this.right = new Plane();
    this.top = new Plane();
    this.bottom = new Plane();
    this.front = new Plane();
    this.back = new Plane();

    this.procs.set("dist", new DistProc());

    this.setupConstraints();
  }

  setupConstraints() {
    this.depManager.addDependency(this.left, this.right, this.procs, "dist");
    this.depManager.addDependency(this.right, this.left, this.procs, "dist");
    this.depManager.addDependency(this.top, this.bottom, this.procs, "dist");
  }
}

这是一套参数化建模的示意代码,它当前已经建立好Box三对面的Dist依赖关系,但是现在我突然想把Dist依赖关系改成Parallel依赖关系。

我想通过这段代码,试图让 AI 理解我的改动会带来其他影响,从而AI会帮助我找到那些影响,并帮助我同步修改。

那么,当我把"dist"改成"parallel",看看它们会给我怎样的反馈:

从现象可以看到,灵码没有识别出我想把”dist“改成”parallel“的意图,所以在我修改后,没有给出任何反馈。所以可以推测,IDE插件的Tab补全,是无法识别出代码编写者的修改意图的。

然后再看Cursor,当我把“dist”改成“parallel”后,它准确识别到了我的意图,我只需要摁一下Tab键,光标就会自动跳到目标位置,同时也会精确的按照我的意图把受影响的代码给同步修改。

注意,它甚至更准确的知道,平行的约束关系应该是对称的,所以又多给我加了3行代码

所以,为什么Cursor的Tab键那么好用,因为它能精确的识别出代码编写者的意图,并通过Tab键快速切换光标到指定位置,同时完成修改。这种Tab补全,在我们写下每一个字符、按下每一个回车的时候,都在时时刻刻的提升着我们的编程效率,帮助我们快速的进入心流状态。这就是大家为什么普遍觉得Cursor使用非常丝滑的根本原因。

5. 怎么衡量AI IDE对提效的贡献

AI IDE对编写代码的贡献,不能简单地用“大模型生成的可用代码占比”来衡量,因为这种衡量标准,完全是在衡量大模型本身的 能力 ,完全忽视了“软件能力”所带来的编程体验和效率的巨大提升。 所以,在我们选择IDE时,大模型的token成本是一方面,但IDE的智能化编程体验更需要着重考虑。因为这才最通用的,能够在任何复杂场景下,都能显著提升编程效率的能力。

6. 团队介绍

三翼鸟数字化技术平台-设计自研平台」依托实体建模技术与人工智能技术打造面向家电的智能设计平台,为海尔特色的成套家电和智慧场景提供可视可触的虚拟现实体验。智慧设计团队提供全链路设计,涵盖概念化设计、深化设计、智能仿真、快速报价、模拟施工、快速出图、交易交付、设备检修等关键环节,为全屋家电设计提供一站式解决方案。