跳转到内容

编辑器

编辑器(本文所指都是文本编辑器),顾名思义,就是可以编辑文本文件的工具。写代码离不开编辑器

大多数编辑器都会提供 语言服务 以提高开发效率,比如 语法高亮代码补全类型提示引用跳转

大多数编辑器为了易用都有 图形界面,并且可能包含一些按钮或类似的图形元素,通过点击就可以执行各种操作,比如 生成可执行文件运行测试

只有知道如何在没有 集成开发环境(IDE)的情况下进行开发,才能真正理解 IDE 到底是什么。下图以 C/C++ 为例展示了最简单的开发流程

flowchart LR
    A[源代码] --编译--> B[可执行文件] --运行/调试--> C[结果]

我们首先在编辑器里写代码,然后在终端里用编译器编译出可执行文件,最后(还是在终端里)直接运行可执行文件或用调试器进行调试。

很多人喜欢 IDE,因为它让开发变得更方便。IDE 把一切都整合到了一起,捆绑了编辑器、编译器、调试器、终端以及各种配件。这对初学者很友好,因为用户不需要知道那一堆工具应该怎么安装和使用,只需在 IDE 提供的图形界面上 点点点 就行。使用者甚至可以连编程语言的基本常识都不知道 我猜测那些只会用 IDE 的人中有很多连自己写的代码是怎么运行起来的都不知道,在他们看来这是一个 IDE 的魔法

但我不建议任何希望提升自己水平的、有一定经验的开发者使用 IDE。IDE 有很多缺点

  • 捆绑了很多东西,不够轻量,不够灵活,很难定制
  • 通常 IDE 都是针对某个特定编程语言设计的,不能够很好地支持多语言项目,每换个语言写项目就要换个 IDE,重新学习各种操作、适应新的界面。使用 IDE 的本意是节约学习成本和减轻记忆负担,这下反而得不偿失了
  • IDE 在图形界面的背后隐藏了很多细节,对于依赖 IDE 的人而言这通常就是魔法。一旦遇到 IDE 无法解决的问题或 IDE 本身出现问题时,不知道 IDE 实际在做什么的话根本就无从下手
  • 好用的 IDE 大多都要付费 好用的标准比较主观,但很多 IDE 都要付费是真的

而相比之下,使用编辑器有很多好处,并且这个好处会随着时间的推移而越来越多。

  • 你在编写代码的过程中不断地对编辑器进行配置(比如通过扩展实现了丰富的语言服务和 GUI 操作支持,比如定制了自己喜欢的主题、快捷键、代码片段等),你的开发效率会越来越高,一切都越来越符合你的喜好
  • 你逐渐学会各种工具的使用方式,你对开发有了更加深刻的、属于自己的理解
  • 你亲手挑选了每个扩展,组合起每个工具。你对这一切了如指掌,即使出现问题也可以轻松定位到具体的扩展/工具,甚至还可以自己修复
  • 你不用担心自己会为了使用别的语言而不得不更换编辑器,因为你已经能够轻松地配置出自己满意的开发环境

不夸张地说,一款好的编辑器可以陪你整个开发生涯,是个比被窝更让人感到亲切的东西。

不过我并不想全盘否定 IDE,它的存在肯定是有价值的

  • 对于初学者而言,IDE 是个非常好的起点。它让初学者可以只专注于编写代码,而忽略其它所有繁琐的事情
  • 对于企业而言,统一使用相同的 IDE 可以减少沟通、合作的成本,也更方便培训新人

我将编辑器按照使用的 UI 进行分类

  • GUI 学习成本低,但比较重,启动慢、占用高,并且可能出现图形渲染错误
  • TUI 学习成本高,但非常轻量,启动快、占用低,且通常更稳定

选择什么编辑器主要看个人喜好。我更习惯用 GUI,偶尔也会用 TUI。

  • VSCode 免费开源,轻量灵活,支持非常高程度的自定义,可以通过扩展达到类似 IDE 的效果,且对远程开发、AI 编程、冷门语言等支持度很高。我现在所有的项目都使用 VSCode 编写代码,包括 C/C++、Python、Web、Julia、Go、Rust、Verilog、Godot 甚至是 Markdown、Tex 等类型。
  • Zed 类似 VSCode,不过使用 Rust 实现,因此速度更快,但也导致无法重用 VSCode 的扩展生态。Zed 自己的扩展生态正在迅速发展中。
  • Neovim Vim 的现代版本,更易用且可扩展性更强。Neovim 的扩展使用 VimScript/Lua 编写,复用了 Vim 生态的同时还有属于自己的生态。
  • Helix 后现代模态文本编辑器,受 Kakoune / Neovim 启发,使用 Rust 实现