Tab功能的使用
什么才是AI辅助编程最简单直接的形式?为什么不同的AI编辑器之前都实现了Tab功能,但是体验却差别这么大?Cursor的Tab功能实现了哪些能力呢?
Cursor 辅助AI编程提供了三个主要功能:
- Tab功能
- 提示框功能(Cmd + K)
- 聊天功能(Cmd + L)
我们这次主要介绍Tab,这个让用户最能直接感受到 Cursor 魔力的功能。
为什么不同的AI编辑器之间都实现了Tab功能,但是体验却差别这么大?Cursor的Tab功能实现了哪些能力呢?
什么是Tab功能
什么才是AI辅助编程最简单直接的形式?其实就是根据当前的代码上下文,自动生成代码补全的建议,用户直接通过Tab键就可以完成代码的修改与补全。
我想不到有什么比这个更简单直接的辅助编程方式了。用户不需要描述任何需求,AI直接为你提供建议,这就是最自然最直接的辅助方式。
Cursor的Tab功能,正是这样的一个辅助编程工具。相比GitHub Copilot,豆包MarsCode,Cursor最强的优势在于它的代码编辑能力,不仅可以插入代码,而且可以对现有的代码进行修改,这也是Cursor在官方文档中多次强调的:
也可以在之前的文章《为什么放弃Github Copilot?》中看到更详细的对比。
Tab基础功能
多行补全
最基础的功能就是代码生成,直接根据当前光标所在的位置,生成代码补全建议。如下图所示:
在这个例子中,你可能只输入了函数定义和第一行,Cursor的Tab功能就能智能地补全剩余的代码。
但Cursor的Tab功能不仅限于此,它还支持多行编辑,可直接生成多行代码补全建议。
如下图所示:
Tab功能会根据你当前光标处的修改去生成多行代码补全建议,上面例子你输入了Block后,类似的其他地方也会提示你应该补充Block。
注意,上面的例子中,Tab在进行代码补全建议时,提示的补全代码都是以灰色代码的形式进行展示的。
Tab高级功能
智能重写(Smart Rewrite)
Cursor的Tab功能不只是简单的代码补全。它还能聪明地改写你已经写好的代码。这就是Cursor最引以为豪的"代码编辑"功能。无论是小改动还是大重构,这个功能都能派上大用场。
在进行代码重写(或修改)时,Cursor的代码修改建议会通过提示框的形式展现出来,而不是代码补全的灰色代码提示。
光标预测(Cursor Prediction)
上面介绍的功能都是Cursor基于当前光标的位置,再结合代码的上下文,进行补全或修改提示。
更近一步的。
Cursor还能预测你下一步可能要编辑的位置。这个强大的功能被称为"光标预测"。(貌似我知道为啥Cursor要叫Cursor了)
在上面的例子中,我们可以看到你修改了一个函数的名称,Cursor 预测到下面红圈位置的函数名也应该随着改变。
同样的这个例子中你修改了updates变量的名称为updatesToServer,Cursor就会预测下面的updates变量也应该更新为updatesToServer。
小技巧
Tab in Peek
Cursor的Tab功能不仅限于主编辑窗口,在"Go to Definition"或"Go to Type Definition"的预览窗口中也可以使用。这个特性在添加新的函数参数时特别有用。
例如,当你需要修改一个函数定义,然后快速修复所有使用该函数的地方时,这个功能就非常方便。特别是对于使用vim的用户,可以结合gd命令,先修改函数定义,然后快速修复所有调用处。
在上面的例子中,我们可以看到用户在预览窗口中使用Tab功能来修改函数定义,添加了一个新的参数。
这个功能可以提高代码重构的效率,使得添加新功能或修改现有接口变得更加简单和快速。
部分Accepts
你可以通过按`Ctrl/⌘`和右箭头来接受建议的下一个单词。这让你能更精细地控制代码补全的过程。
Tab功能的未来发展
从使用体验上来说,Tab功能的上下文引用还有改进空间。比如,从别处文件修改的代码,回到当前文件时,Tab功能的提示错误率就比较高。
根据Cursor博客Next Action Prediction中提到的未来规划,Tab功能未来将支持跨文件的代码生成提示,不再仅限于当前文件的代码建议生成。这意味着Cursor将能更好地理解整个项目的上下文,提供更准确、更有用的代码建议。
总结
总的来说,Cursor的Tab功能是一个强大而直观的AI辅助编程工具。通过本教程,你应该对它有了足够多的了解。
但是 Cursor 的强大并没有看起来那么简单,经过深入的研究才发现,Cursor的团队做了非常多的改进与优化工作。
Cursor Tab功能使用的是自研模型,在Cursor的博客里面提到了很多训练模型的方法以及优化的细节,感兴趣的朋友可以去看一看。