偶然想起之前上大学的时候,曾经和舍友聊过各种编程工具。那时候VS Code已经是非常火爆的编辑器,而贫穷如我的当时并没有想到能用学生邮箱申请JetBrains家的全家桶套餐,VS Code的全能、开源免费、可扩展而且已经成熟的扩展生态使得它成为了我当时最喜欢的编程工具。但是当我和舍友提起“我最喜欢的IDE”这个话题的时候,我的舍友一口咬定

​​‌‌​​​‌‌​‌​​‌‌‍​‌​‌‌‌​​‌‌‌‌​‌​‍​‌​​‌​​​‌​​​‌‌​‍​‌​‌‌​​​‌‌​​​​​‍​​‌​‌‌‌‌‌‌‌‌​​​‍​‌‌​​‌‌‌​‌‌​​‌‌‌‍​‌‌​​​‌‌‌​​​‌​‌‍​​‌‌‌‌‌‌‌‌​​‌‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌​‌‍‌‌​​‌‌​‌‍​‌​​​​‌‌​​​‌​‌‌‍​‌‌​​​‌​‌‌‌‌​​‌‍​​​​​​​​‌‌‌‌​​‌‌‍‌​‌​‌​​‌‍‌​‌​‌‌​​‍‌‌​‌‌‌‌‌‍‌​‌‌‌‌​​‍‌​​‌​​​​‍‌​​‌‌​‌‌‍‌​​‌‌​‌​‍​‌​‌‌​‌‌‌​​‌‌‌‌‍​‌​​​​‌​‌‌​‌​‌​‍​​​​‌​​​‌‌​‌​​​‍​‌‌​​​‌‌‌‌‌​​‌​‍​​​​‌​​​‌‌​‌​​​‍‌​‌‌​‌‌​‍‌​‌‌‌​‌‌‍‌​‌‌‌​‌​‍​​​​​​​​‌‌‌​​​​​‍​​‌‌‌‌‌‌‌‌​​‌​‍​​​​​​​​‌‌‌‌​​‌‌‍​​​‌​‌​‌‌​​‌‌‌​‍‌​‌‌‌‌​​‍‌​‌‌​‌​​‍‌​​​​‌‌​‍‌​​‌​​‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌​‌‌​​‌​‍‌​‌‌‌‌​​‍​‌‌​​​‌​‌‌‌​​​‌‍‌‌​​‌‌​‌‍‌‌​​‌‌‌‌‍‌‌​​‌‌​‌‍‌‌​​‌‌​‌‍‌‌​‌​​‌​‍‌‌​​‌‌‌‌‍‌‌​​‌​​​‍‌‌​‌​​‌​‍‌‌​​‌‌​‌‍‌‌​​‌‌​‌‍​‌​‌‌​‌‌‌‌​​‌​​‍​‌‌​​​​‌​‌​​​‌‌‍​​​​​​​​‌‌‌‌​​‌‌‍​‌​‌‌​​​‌‌​​​​​‍​​‌‌​‌​​‌‌‌‌​​​‍​‌​‌​​​‌‌​​‌‌‌‌‍​‌​‌​​​‌​‌‌‌‌‌‌‍​​​​​​​​‌‌‌​​‌​‌‍‌​​‌​‌‌‌‍‌​​​‌​‌‌‍‌​​​‌​‌‌‍‌​​​‌‌‌‌‍‌​​​‌‌​​‍‌‌​​​‌​‌‍‌​‌​​​‌‌‍‌​‌​​​‌‌‍‌​​‌‌‌​‌‍‌​​‌​​‌‌‍‌​​‌​​​​‍‌​​‌‌​​​‍‌‌​‌​​​‌‍‌​​‌‌‌​​‍‌​​‌​‌​​‍‌​​​​‌‌​‍‌​​‌​​‌‌‍‌​​‌​‌‌​‍‌​​‌​​​‌‍‌‌​‌​​​‌‍‌​​​‌‌​​‍‌​​‌​‌‌​‍‌​​​‌​‌‌‍‌​​‌‌​‌​‍‌​‌​​​‌‌‍‌​​​‌​‌‌‍‌​​‌‌‌‌​‍‌​​‌​​‌‌‍‌​​‌​‌​​‍‌​​​‌‌​​‍‌​‌​​​‌‌‍‌​​‌​‌‌​‍‌​​​‌‌​​‍‌‌​‌​​‌​‍‌​​​‌​​‌‍‌​​​‌‌​​‍‌‌​‌​​‌​‍‌​​‌‌‌​​‍‌​​‌​​​​‍‌​​‌‌​‌‌‍‌​​‌‌​‌​‍‌‌​‌​​‌​‍‌​​‌‌‌‌​‍‌​​‌​​​‌‍‌‌​‌​​‌​‍‌​​‌​‌‌​‍‌​​‌‌​‌‌‍‌​​‌‌​‌​‍‌‌​‌​​​‌‍‌​​‌​​‌​‍‌​​‌‌​‌‌

“VS Code不是IDE,最多是一个文本编辑器。”

我的舍友认为我分不清IDE和文本编辑器的区别,还花了很大的篇幅来为我科普何为IDE。当然,我并不认同。
并非不认同IDE的定义,而是我觉得,VS Code虽然最初是一个“编辑器”出身,但是从扩展生态爆炸式发展的那天开始,VS Code就已经是一个IDE了。

何为IDE

要想说明白这个问题,首先就要搞明白,IDE是什么,和文本编辑器的区别又是什么。

维基百科页面
维基百科页面

集成开发环境(Integrated Development Environment,简称IDE,也称为Integration Design Environment、Integration Debugging Environment)是一种辅助程序开发人员开发软件的应用软件,在开发工具内部就可以辅助编写源代码文本、并编译打包成为可用的程序,有些甚至可以设计图形接口。
———— Wikipedia

IDE,集成开发环境。顾名思义,开发者使用IDE的时候,应该可以在IDE中完成代码编写、调试的全部过程,而不是在其中完成编辑,转到其他工具完成调试。这其实也是与文本编辑器的最大区别,因为文本编辑器仅仅完成了编辑的功能。
就像Vim,作为很大一部分编程人员最喜欢的编辑器,它本身就不是一个IDE。哪怕时至今日,众多Vim的fork实现了各种扩展,Vim从始至终也还是编辑器,因为诸如代码高亮、智能补全、语法检查等功能仍然是IDE的第一步“代码编辑”的工作,而想要进行编译、调试仍然需要:wq出去换用专门的调试或编译工具来完成。
而IDE方面的代表,VS Code的老大哥,曾经很多开发者心目中的“神”,Visual Studio就是一个非常典型的集成开发环境。除了上述功能以外,你可以在代码中添加断点,可以在软件运行时进行debug调试、内存分析等,甚至还包含智能分析和智能代码提示的额外功能。而能称为神的更主要原因,就是因为,它支持众多语言和功能的编辑和调试,同时如IDE的定义一般,是软件“集成”的。

那VS Code是什么呢?

那就要看VS Code支持什么功能了。
假设你今天第一天使用VS Code,你很高兴地从官网将它下载下来,然后直接使用它打开了一个之前的开发项目,这时候发现只有基本的代码高亮和普通提示,按下F5运行又告诉你没有任何配置。你查阅了配置文档,发现只是帮你调用了外部程序。如果你的第一次使用是这样的话,那你大概率就要认为VS Code不算是IDE了。
大概是从Sublime编辑器和Atom编辑器开始,代码编辑器开始拥有了扩展,通过扩展可以完成很多传统编辑器无法实现并且原本没有提供的功能。但是无论如何,Sublime和Atom一直都是以编辑器自居的。而后来者VS Code最开始的定位也确实是一个全能代码编辑器,哪怕到今天打开VS Code的官网,它的slogan也写的是"Code editing. Redefined."

官网宣传词:重新定义代码编辑
官网宣传词:重新定义代码编辑

但是,从官方开始发力各种官方语言支持扩展,并且开始推出众多语言服务器集成支持开始,VS Code的意义就不仅仅是代码编辑了。事实上从很早,甚至可能是最早的版本开始,VS Code就已经支持了运行与调试配置。恰如上面说的,如果你不做任何配置,那么你确实只能获得代码编辑器一样的体验。VS Code从来都不是0配置的,或者说很少有编辑器能真正做到0配置开箱即用并且符合使用者要求和习惯的。VS Code制胜的法宝就是扩展。
如果你现在启动VS Code,打开了一个之前没有启动过的项目,右下角就会提示你安装对应扩展。而在安装完成并且环境配置完毕后,调试配置就已经自动添加完毕了。你不需要离开VS Code,就完成了代码断点、分析、调试任务。就算VS Code曾经模仿过的Atom、Sublime一直是带扩展的编辑器,也包含类似的扩展,但也不曾对其提供官方、完整的一揽子支持。它完成了IDE的两大基本目标,又凭什么说它不是IDE呢?

官网列举的四大亮点
官网列举的四大亮点

如今,VS Code已经不仅于此了。Jupyter Notebook,Lunar Paint,Pylance,TabNine, GH Copliot,无数优秀的扩展在推着VS Code向着更加全能的方向进步,微软在拥抱开源的同时也在从开源社区获取更多的支持,让VS Code能完成代码开发之前、代码开发之后的更多事情。VS Code是基于Electron的Web app,即使Electron并不是一个完美的项目,但仍然为VS Code提供了跨平台和更强大的扩展能力,这一点也是老大哥VS所不能比拟的。当然,VS Code虽然目标是全能编辑器,但是距离VS那样的已经完善且重型的IDE还有一段不近的路。
对于日常开发来说,python、TypeScript等这些语言VS Code已经可以完美胜任了,Go、Java、CSharp(.net)这些也已经支持的相当不错了,甚至官方还为Java版本推出了单独的集成捆绑包,可以直接完成整体Java环境的部署,Unity也已经支持使用VS Code替代VS作为默认编辑器。扩展是VS Code的力量之源,而同时又使其拥有了无限的可能。
2022年的今天,VS Code的变种也有很多了。得益于其基础设施都基于Web技术构建,移植到浏览器实现云编辑环境也变得非常简单。在通过Github Codespaces和Gitpod尝试过云编辑后,我也真的对这种不依赖本地环境的编辑方式产生了很浓厚的兴趣。同时,无论是Jetbrains还是Eclipse,都开始布局云编辑器和可扩展轻量编辑器。JetBrains开发了Fleet剑指VS Code,而Eclipse Che则是直接将VS Code、JetBrains IDEs的云版和自家编辑器一起打了个包,开发者只需要一次部署,想用哪个就用哪个,还能从本地编辑器远程连接。或许,这也是未来的趋势之一吧。
当然,也希望微软能继续完善VS Code,让它更加强大,或许终有一天能看到VS Code真正的官宣,成为和VS同等级别的全功能IDE。虽然路还遥远,但并非不可及。