在过去的 3 年时间里,我一直在使用 neovim 作为我的主要编辑器。但是最近我将编辑器从 neovim 切换到了安装了 vim 插件的 Visual Studio Code。
为什么我之前会选择 neovim
在我读大学的时候,我的主力写代码的机器是一台 M1 Macbook Air。而 Linux/类 Unix 程序员用户喜欢,也不得不经常和终端打交道。所以在接触了 nvim 之后,我自然而然地喜欢上了这个在终端运行的编辑器。我花了差不多两周时间强制自己使用 nvim 做所有的编程工作,掌握了一些很基础的 vim 操作,然后按照网上的教程写了自己的配置文件。说实话,即使是现在我依然只会这些很基础的操作,但是也足够用了。同时不得不承认的是,使用 nvim 让我觉得我自己是一个极客,一个"与众不同"的程序员,谁不想当一个与众不同的程序员呢。当然当时的这些想法在我现在看来很可笑。
vim/nvim 作为编辑器确实也有自己的优势,足够轻量足够快,没有多余的功能。同时无论是 vim 还是 nvim 都有庞大的插件生态和社区支持。vim/nvim 加上插件的加持后功能不输 IDE。
vim 是一种输入方式
我认为在很多语境里谈论 vim,我们是在谈论一种 输入方式,而不是 vim 编辑器本身。
有些在 Arch/NixOS 使用 nvim 的程序员可能要攻击我了,这可能是一个暴论。为什么这么说?不妨认真想一想,现在你能找到的几乎所有主流的编辑器/IDE 都支持,或者可以通过安装拓展插件后支持 vim 的键位。Visual Studio、Visual Studio Code、JetBrains 全家桶,甚至 Emacs,都可以通过安装插件的方式支持 vim 键位。Zed 的 vim mode 甚至开箱即用。甚至那些算法题刷题网站(LeetCode、牛客等)的网页编辑器大多都支持 vim 键位。也就是说我可以在几乎所有编码场景都使用 vim 键位,而不需要使用原汁原味的 vim/nvim。实际上,最早 vim 的优势其实就是其独特的输入方式可以使得程序员在编码的过程中可以尽量使双手不离开键盘的中间区域。nvim 在 vim 的基础上将其“现代化”(在我看来也不够现代化),仅此而已。我可以在其他的编辑器里使用几乎和原生 vim 没有区别的输入方式,并且享受其他编辑器开箱即用的构建工具、调试工具和 linter 等。实际上我也是这么做的。现在每当我在一个新的环境里写代码,第一件事必须是给使用的编辑器安装 vim 插件。
跳出"工具陷阱"
我决定从 nvim 切换到 vscode,对我自己来说,本质是跳出了工具陷阱。我使用工具陷阱来描述盲目听从其他人看法,从而选择不适合自己的工具的行为。可以用一些例子来说明。比如一个同时也是 PC 游戏玩家的程序员,给自己唯一的一台电脑安装了 Linux 发行版。这样的工具选择行为是盲目的、不符合实际情况的。
“工具陷阱”这个问题其实可以提得更加尖锐一些。你总是能在网络上(以某低龄视频平台为主)看到很多人鼓吹某某 Linux 发行版有多好、某某编辑器有多神、甚至某某编程语言又怎么吊打其他语言了。这些人对某个工具或者某项技术表现得近乎狂热,颇有邪教信奉者传教的意思。但往往这些越是狂热的推销者,越可能是没有经验的开发者。当然我不想在这个议题上表达太负面的情绪,毕竟我也只是个没什么工作经验的初学者。我觉得大多数愿意“折腾”的程序员都会经历这样的一个阶段:从信奉某个工具,到找到适合自己的工具。就我自己来说,现在我的大部分开发都在 Windows 平台上完成,我主要使用的语言又是 C++,加上我早就习惯了 vim 输入方式,所以 vscode + vim 插件可能就是最适合我的工具。如果正在看这段文字的你恰巧是一个在工具陷阱里着了魔的程序员,希望你可以返璞归真,意识到适合自己的才是最好的。