阅读(147) 书签 (0)

Tab功能的使用

2024-11-22 14:43 更新

什么才是AI辅助编程最简单直接的形式?为什么不同的AI编辑器之前都实现了Tab功能,但是体验却差别这么大?Cursor的Tab功能实现了哪些能力呢?


作者 鸟飞鱼跃 and 原文链接


Cursor 辅助AI编程提供了三个主要功能:
  • Tab功能
  • 提示框功能(Cmd + K)
  • 聊天功能(Cmd + L)

我们这次主要介绍Tab,这个让用户最能直接感受到 Cursor 魔力的功能。

为什么不同的AI编辑器之间都实现了Tab功能,但是体验却差别这么大?Cursor的Tab功能实现了哪些能力呢?


什么是Tab功能

什么才是AI辅助编程最简单直接的形式?其实就是根据当前的代码上下文,自动生成代码补全的建议,用户直接通过Tab键就可以完成代码的修改与补全。

我想不到有什么比这个更简单直接的辅助编程方式了。用户不需要描述任何需求,AI直接为你提供建议,这就是最自然最直接的辅助方式。


Cursor的Tab功能,正是这样的一个辅助编程工具。相比GitHub Copilot,豆包MarsCode,Cursor最强的优势在于它的代码编辑能力,不仅可以插入代码,而且可以对现有的代码进行修改,这也是Cursor在官方文档中多次强调的:

1

也可以在之前的文章《为什么放弃Github Copilot?》中看到更详细的对比。


Tab基础功能

多行补全

最基础的功能就是代码生成,直接根据当前光标所在的位置,生成代码补全建议。如下图所示:

2

在这个例子中,你可能只输入了函数定义和第一行,Cursor的Tab功能就能智能地补全剩余的代码。


但Cursor的Tab功能不仅限于此,它还支持多行编辑,可直接生成多行代码补全建议。

如下图所示:

3

Tab功能会根据你当前光标处的修改去生成多行代码补全建议,上面例子你输入了Block后,类似的其他地方也会提示你应该补充Block。

注意,上面的例子中,Tab在进行代码补全建议时,提示的补全代码都是以灰色代码的形式进行展示的。


Tab高级功能

智能重写(Smart Rewrite)

Cursor的Tab功能不只是简单的代码补全。它还能聪明地改写你已经写好的代码。这就是Cursor最引以为豪的"代码编辑"功能。无论是小改动还是大重构,这个功能都能派上大用场。

在进行代码重写(或修改)时,Cursor的代码修改建议会通过提示框的形式展现出来,而不是代码补全的灰色代码提示。


光标预测(Cursor Prediction)

上面介绍的功能都是Cursor基于当前光标的位置,再结合代码的上下文,进行补全或修改提示。

更近一步的。

Cursor还能预测你下一步可能要编辑的位置。这个强大的功能被称为"光标预测"。(貌似我知道为啥Cursor要叫Cursor了)

4

在上面的例子中,我们可以看到你修改了一个函数的名称,Cursor 预测到下面红圈位置的函数名也应该随着改变。


5

同样的这个例子中你修改了updates变量的名称为updatesToServer,Cursor就会预测下面的updates变量也应该更新为updatesToServer。


小技巧

Tab in Peek

Cursor的Tab功能不仅限于主编辑窗口,在"Go to Definition"或"Go to Type Definition"的预览窗口中也可以使用。这个特性在添加新的函数参数时特别有用。


例如,当你需要修改一个函数定义,然后快速修复所有使用该函数的地方时,这个功能就非常方便。特别是对于使用vim的用户,可以结合gd命令,先修改函数定义,然后快速修复所有调用处。

6

在上面的例子中,我们可以看到用户在预览窗口中使用Tab功能来修改函数定义,添加了一个新的参数。

这个功能可以提高代码重构的效率,使得添加新功能或修改现有接口变得更加简单和快速。


部分Accepts

你可以通过按`Ctrl/⌘`和右箭头来接受建议的下一个单词。这让你能更精细地控制代码补全的过程。


Tab功能的未来发展

从使用体验上来说,Tab功能的上下文引用还有改进空间。比如,从别处文件修改的代码,回到当前文件时,Tab功能的提示错误率就比较高。

根据Cursor博客Next Action Prediction中提到的未来规划,Tab功能未来将支持跨文件的代码生成提示,不再仅限于当前文件的代码建议生成。这意味着Cursor将能更好地理解整个项目的上下文,提供更准确、更有用的代码建议。


总结

总的来说,Cursor的Tab功能是一个强大而直观的AI辅助编程工具。通过本教程,你应该对它有了足够多的了解。

但是 Cursor 的强大并没有看起来那么简单,经过深入的研究才发现,Cursor的团队做了非常多的改进与优化工作。

Cursor Tab功能使用的是自研模型,在Cursor的博客里面提到了很多训练模型的方法以及优化的细节,感兴趣的朋友可以去看一看。