【CSDN 编者按】 本文 讲述了一位程序员从初次接触到最终精通 Vim 编辑器的心路历程。16岁时,作者因一段视频中展示的高效编码方式而对 Vim 产生了兴趣,但由于 Vim 的学习曲线陡峭,初次尝试便以失败告终。五年后,作为一名专业软件工程师,作者再次受到 Vim 的吸引,决定尝试 Neovim,一个基于 Vim 的增强版本,但仍然因不适应而放弃。
原文链接: https://emanuelcepoi.com/preview/66785dd2d3170dd0332a47d9
本文为 CSDN 组织编译,未经授权禁止转载。
作者 |
Emanuel Cepoi
译者 | 弯月
出品 | CSDN(ID:CSDNnews)
16岁的时候,我观看了一段视频。屏幕上是一个终端画面,光标来回跳跃,却总是精准地落到需要的位置,而鼠标根本没用到。
我非常惊讶。我从未见过有人通过终端窗口编写代码,作为一个 VS Code 用户,我写代码的速度从来没有那么快。在那一刻,我知道我必须试试看视频作者使用的工具。我渴望自己也能达到那种酷炫的水平,但没想到我花费了六年之久才做到了。
四处打听之后,我才了解到视频作者使用的是vim。他使用的是纯vim,零插件,甚至连 LSP 都不用。深入挖掘下去,我偶然发现了「Unix即IDE」的概念,我被吸引住了。
这就是我的 vim 之旅的开始。
初次接触
我上网搜索了一番如何安装vim,却发现我的机器已经预装了。于是,我满怀激动地在终端上运行了 「vim」。
但几秒钟后,我发现一切都很奇怪。我不知道如何通过键盘输入,也不知道如何打开文件,什么都做不了。
沮丧涌上心头,我决定关闭终端。然而,我甚至不知道如何关闭。最终,我不得不上网搜索 「如何关闭 VIM」。令我惊讶的是,StackOverflow 上关于这个问题的浏览次数高达几百万。至少我不是唯一一个感到困惑的人。
我继续搜索,然后发现了 vimtutor。于是,我尝试了 vimtutor,事前逐渐有了眉目。我可以输入一些内容,并使用 hjkl 移动光标了。
我花了不到一天的时间粗略学习了一下vimtutor。尽管仍然感到困惑,但我相信通过练习,我会变得更好。记住这些按键组合很难,hjkl 使用起来感觉也很奇怪。不同的插入模式令我很不解,什么时候应该按 "i",什么时候应该按"I"?为什么删除会覆盖我的剪贴板?如何更高效地跳转?我的速度非常慢,这令我很厌烦,我希望加快速度。
第二天,我再次尝试,却发现前一天学到的知识几乎都不记得了,沮丧之余,我又过了一遍vimtutor。但我依然很乐观,坚持下去,我一定能掌握vim——至少大家都是这么说的。
但目前,我选择暂时搁置。
第二次机会
5年后,我成为了一名专业的软件工程师,我所钟爱的写代码已成为我的职业。每天我都会写代码,而且是 IntelliJ 的超级粉丝。我所有的工作都依赖IntelliJ:前端开发、移动开发和后端开发(不是 Java)。这款工具非常棒。而我的生活也顺风顺水。
然而,我总感觉缺了些什么。写代码时,我依然使用鼠标,而且我也没有成为酷炫的 vim 用户俱乐部的一员。虽然我略懂一点 vim,偶尔可以在服务器上编辑文件,但还不足以取代 IntelliJ,也不足以炫耀「我会用 vim」。
再次尝试vim的想法一直在我脑海中徘徊,但五年前那段难忘的经历仍然困扰着我。
偶然间,我在观看一段直播时注意到作者也在使用vim,这让我想起多年前自己也曾尝试。看着他轻松地在代码间跳转,并使用各种疯狂的快捷键,我意识到他是一个真正的 vim 爱好者。
我看到了希望,感觉自己也能行。
于是,我决定尝试 Neovim。上网搜索了一番,我发现这是一个改进版,支持 Lua。虽然我不懂 Lua,但乍一看似乎比 VimScript 更容易。
这次,我决定聪明一点,使用预配置的选项,因为自己写配置似乎仍然不可能。我下载了 https://astronvim.com/,并试了一下。
我拥有了一个功能齐全的 Neovim 配置。我有一个文件树,可以搜索内容,打开文件,而且还能导航,尽管很勉强。我感觉自己在进步,不是吗?
我试着在工作中使用这款工具,却发现简直不可能。与 IntelliJ 相比,Neovim 的设置感觉很奇怪。重构功能在哪里?如何更快地搜索文件?如何只搜索最近打开的文件?如何重命名文件?为什么自动导入不起作用?还有,为什么 hjkl 这么烦人?为什么我总是记不住这些按键?
我再一次倍感沮丧。我只是想做好自己的工作,但根本不行。我太慢了,我不能占用大量工作时间来尝试这个工具,而且astronvim的设置感觉非常臃肿。
于是,我又放弃了。
最后一次机会
两周后,我注意到越来越多的主播在使用 Neovim。虽然我还未能掌握这项炫酷的技术,但我有了再次尝试的动力。
这一次,我决定动动脑子。我不打算使用Astronvim之类的发行版。我在网上搜索了一下,了解到我可以在 IntelliJ 中使用 Vim 键绑定。IdeaVim 拯救了我。
这真是个好消息。我不仅可以拥有IntelliJ 所有优秀的功能,同时还能使用 Vim 在代码中跳转。
我记得,使用vim的大部分挫败感都来自我没有掌握基本的操作,比如 gtd(转到定义)、gtr(转到引用)、查找所有引用以及全局重命名等。使用带有 Vim 键绑定的 IntelliJ 是一个很好的思路,我可以使用IntelliJ处理所有 LSP 任务,同时使用Vim快速导航代码。
就这样,我完成了部分切换。
结合使用IntelliJ和vim操作的第一天,我的工作速度非常慢,一切仍然令人沮丧,但我知道这是暂时的。磕磕绊绊地度过了第一天,在 IntelliJ 中使用vim确实帮助很大。
第二天,我开始适应了。我掌握了hjkl 的用法了,不再混淆。我在进步,并且有动力继续下去。
我坚持了整整一周。
全面切换
大约在 IntelliJ 中使用 Vim 两个月后,我的速度明显提升了。我可以迅速地导航代码,有时IntelliJ甚至跟不上我的节奏(可能是因为它是用 Java 写的)。
我已经熟练掌握了垂直移动和水平移动,在引号和括号内跳转。我发现了 F 和 T 操作,而且我会在每个应用程序中寻找 "Vim 模式"。十六岁的我一定会为现在的自己感到骄傲。
但我仍然不是酷炫的 vim 用户俱乐部的一员。所以我决定再给 raw nvim 一次机会,但这次我准备聪明一点。
我记得以前自己很讨厌复杂的 astronvim 文档,不喜欢在这些文档中查找快捷键。所以,我决定自己动手编写 nvim 配置。
我想深入了解我的整个配置,并掌握所有细节,所以我花了一个周末学习了 Lua。
在掌握Lua后,nvim似乎也变得合理起来,我的第一个 nvim 配置逐渐成形。
我拥有了自己的LSP,我的第一个自定义取消了每次按键都会弹出的讨厌的自动补齐窗口。但在有需要时,我只需按下command+空格键就能看到自动补齐窗口。
我配置了 Telescope,可轻松查找我需要的内容,还设置了漂亮的 Gruvbox 主题。
我学习了宏、寄存器和快速修复列表。我终于明白按删除键时复制的文本去了哪里。我可以修改整个代码库中的任何一段代码,并通过终端完成所有操作。美好的生活又回来了。于是,我用一个非常简约的 nvim 设置换掉了IntelliJ。
我卸载了 IntelliJ 并取消了订阅。
我终于成为了酷炫的 vim 用户俱乐部的一员,我终于可以说「我使用的是Vim」。
现状
时隔一年,如今的我每天都在使用nvim。我感觉自己的工作速度比以前更快。我的打字速度可以名列全球前 0.1%:每分钟 200 个单词。如此之快的打字速度与 vim 操作结合起来,快得令人难以置信,比我认识的任何人都快。
我会抓住每一个机会炫耀自己使用 vim,并试图说服其他人加入 vim 革命。
我终于明白为什么那些高手不使用任何插件。我自己也开始使用 tmux,并加入「Unix即IDE」运动。
坦白说,我认为学习 vim 是我一生中最好的选择之一。其次便是接受「Unix即IDE」的理念。
推荐阅读: