VS Code,全称是Visual Studio Code,但因为全称太长,微软旗下另一款产品visual studio又经常被简称为VS,所以这款与vs有一定渊源的代码编辑器就被简称为VSCode。
它是一个免费的、开源的跨平台编辑器。之所以强调“编辑器”,我想是因为 VS Code 并无意成为一个全尺寸的集成开发环境,也就是IDE。
很多人都把编辑器等同于IDE,其实从专业角度来讲并非这样。IDE 更为关注开箱即用的编程体验、对代码往往有很好的智能理解,同时侧重于工程项目,为代码调试、测试、工作流等都有图形化界面的支持,因此相对笨重,Java程序员常用的Eclipse定位就是IDE;而编辑器则相对更轻量,侧重于文件或者文件夹,语言和工作流的支持更丰富和自由,VS Code 把自己定位在编辑器这个方向上,但又不完全局限于此。
如果你有兴趣,可以打开自己喜欢的编辑器官网看看它是怎么样的定位。总体来说,近几年流行风向是轻量的编辑器,这也是大势所趋。
要理解VS Code代码编辑器的设计思路,就需要先看看VS Code的发展轨迹。从我的角度看,不管你是学习编程语言,还是框架、编辑器,都应该先去看看它的来龙去脉,了解它们是怎么发展而来的,曾经遇到了什么问题,又是怎么解决的,这些信息都便于你从大局上提高对事情本质的认识。
2011 年底,微软从 IBM 请来了 Erich Gamma。Erich Gamma 是《设计模式》一书的作者之一,曾和肯特·贝克(Kent Beck) 一起发明了 JUnit,并且在 IBM 领导 Java 开发工具的开发工作。微软把他请过来,就是希望他能够打造一款在线的开发工具,让开发者们能够在浏览器里获得 IDE 般的开发体验,这也就是之后为人所知的 Monaco Editor。
Erich Gamma 见证了 Eclipse 从崛起到逐渐臃肿,再逐渐式微的整个历程,他深刻认识到 Eclipse 成功的一部分原因是极度的可定制化特性,任何功能在Eclipse中都可以用插件来实现;但是由于 Eclipse 的插件跟核心代码运行在同一个进程内,随着插件的增多,核心功能经常会被插件拖累,也就更加让人觉得笨重。
因此,在打造 Monaco Editor 时,开发团队非常注重核心功能的性能,尽可能地保持轻量,而对资源和性能消耗较大的功能,则运行在其他的进程之中。
2015 年,Erich Gamma 带领团队把 Monaco Editor 移植到桌面平台上,也就是这个专栏的主角 Visual Studio Code,即 VS Code。
VS Code 继承了 Monaco Editor 的设计原则,其核心是做一个高性能的轻量级编辑器;个性化的功能,则交给插件系统来完成。这一点可以说是师承 Eclipse,但同时又吸取了 Eclipse 的教训,把插件系统运行在主进程之外,高度可定制但同时又是可控的。
与此同时,VS Code 也有自己的使命,那就是让开发者在编辑器里拥有 IDE 那样的开发体验,比如对源代码有智能的理解、图形化的调试工具、版本管理等等。
不难发现,VS Code 希望在编辑器和 IDE 之间找到一个平衡。在这样的设计思路下,你打开编辑器,不需要创建任何的项目工程文件就可以开始使用,并高效便捷地操作文本;同时在编程语言插件的支持下能够得到语法检查、智能提示;你还可以借助丰富的插件 API 拓展 VS Code 以满足自己的需求。
要达成这样的目标,难度可以说是非常大的,但 VS Code 取得了不错的成果。究其原因,在我看来就是微软打造了一个开放的平台。虽然有“马后炮”的嫌疑,但让我们一起来看看这样的一个开放平台是怎么助力 VS Code 的吧。
首先,VS Code 的源代码以 MIT 协议开源。这不仅意味着大家能够免费获取到 VS Code 的核心代码,更意味着社区能够基于 VS Code 的代码,开发自己的产品。
业界现在比较知名的基于 VS Code 的项目有 SourceGraph、StackBlitz、CodeSandbox 等,这些产品可以提供非常接近VS Code 的开发体验,而VS Code 也经常从它们身上吸取技术和产品层面的宝贵经验。
其次,开发过程和反馈渠道的开放。 VS Code 源代码托管在 GitHub 上,同时使用 GitHub 管理项目的开发计划和测试,每个用户都可以在 GitHub 上了解到 VS Code 的开发进度。与此同时,GitHub 也是 VS Code 唯一的反馈渠道,开发团队根据反馈的影响程度进行统筹安排。作为用户,你可以近乎实时地跟开发团队进行交流,了解产品的发展情况。
再次,接口的开放。VS Code 自带了 TypeScript 和 Node.js 的支持,用户下载 VS Code 后,立刻就能够在书写 JavaScript 和 TypeScript 时获得智能提示,而且无需任何配置即可立即调试 Node.js代码。VS Code 核心团队有 Node.js 高手,TypeScript 也是微软官方出品的,VS Code 能把对这两个语言的支持做好,似乎并不是什么值得惊讶的事情。但是 VS Code 团队不可能精通所有语言,对于他们不熟悉的语言,VS Code 该怎么支持呢?
最好的办法莫过于把专业的事情交给专业的人来做。为此,VS Code 为编程语言工作者提供了统一的 API ,即Language Server Protocol 和 Code Debugging Protocol,每种语言都能够通过实现两个 API 在 VS Code 上得到类似 IDE 的开发和调试体验。
而且 VS Code 也并没有因为 TypeScript 是微软嫡出就给开小灶,而是对大家都一视同仁,TypeScript 能够得到的支持,其他语言一个也不落下。比如 Rust 的语言支持,就是由 Rust 官方团队开发和维护的,他们可以说是这个世界上最懂怎么给 Rust 做语法支持的一群人了。
在这样的平台上,编辑器开发者、编程语言工作者和社区,各自做自己最擅长的事情,把份内事做到极致。同时,从开发到测试,再到用户反馈都是公开透明的,每个人都能参与其中,把产品往自己希望的方向推进。VS Code 的技术实践和成果,最后也以开源的形式回馈给社区,让大家都能够借助 VS Code 去打造自己的产品,一起成功。
简短地了解了 VS Code 的历史后,如果你也认同它的设计哲学和使命,你肯定还想知道该如何把 VS Code 的这一套转化为自己的内力。你可以按照以下三个步骤来逐步掌握 VS Code。
通过这三个步骤,你在使用 VS Code 时就能够“随心所欲”了。除此之外,我也建议你关注 VS Code 每月的发布更新日志,官方团队会详细讲解每个版本新增的功能。VS Code 的官方博客也非常值得订阅,团队成员会经常分享开发过程的心得感悟,算得上是最前沿的技术分享。
这里我们可以先一起来玩一个“大家来找茬”的游戏:图1是使用没有修改过任何编辑器设置的 VS Code 打开的一个 JavaScript 的文件...
VS Code上的 Python 语言插件,是VS Code插件市场中下载量最大的一个插件。它最初是一个社区项目,在开发了两年后,作者 Don Jay...
Postfix是一款由IBM资助研发的免费开源电子邮件服务程序,能够很好地兼容Sendmail服务程序,可以方便Sendmail用户迁移到Postfix...
既然要使用iSCSI存储技术为远程用户提供共享存储资源,首先要保障用于存放资源的服务器的稳定性与可用性,否则一旦在使用过程中...
DHCP服务程序用于为客户端主机分配可用的IP地址,而且这是服务器与客户端主机进行文件传输的基础,因此我们先行配置DHCP服务程序...
Nginx是一款相当优秀的用于部署动态网站的轻量级服务程序,它最初是为俄罗斯门户站点而开发的,因其稳定性、功能丰富、占用内存...
Shell判断语句编写 Shell 脚本时,可能存在一种情况,你需要在两条路径中选择一条路径。所以你需要使用条件语句,确保你的程序做...