砥石与刚刃这两个词是我最近从怪物猎人 Rise 学来的。砥石在游戏里面是磨刀石,可以用来恢复武器的斩味(可以理解为锋利度);刚刃是一种特性,可以保证在使用砥石之后一段时间内武器的斩味不会下降。
“磨刀不误砍柴功”这个俗语大家应该都听过很多遍,类似的还有“工欲善其事,必先利其器”等等。这些俗语强调我们在做事情前,应该寻找到一个适合的工具,来帮助我们高效地完成任务。
提到这个话题的原因是因为最近我专门学习了 Vim,在学习和使用之后有种相见恨晚的感觉。我认为每个对效率有着极高追求的人都应该尝试一下 Vim.
其实很早之前我就已经接触了 Vim。配置服务器,使用 Linux 离不开 Vim,当时觉得这东西为什么这么难用,要通过模式切换才能插入,还要记各种按键来实现功能,按不好出了问题甚至连撤销都不会。不得已学了一些基本的操作,勉强算是可以用了,但是完全谈不上优雅,那时候的我对 Vim 也没有什么感觉。
再到后来,我对 VS Code 的使用越来越熟练,替换、编辑、插件、熟练使用各种快捷键等等,这些功能可以满足我大部分的需求,因此 Vim 就进一步地远离了我的视线。
我本来想着我应该永远都不会用 Vim 了吧,然后就到了这学期。这学期除了个人的 Research,我又接到了两个实验室的 Projects,导致日常代码量大增,并且因为它们都是合作项目,所以写代码反而不多,顶多是写几个测试例之类的,更多的是调整代码和修改代码。
随着工作量越来越大,我慢慢觉得现在所使用的编辑工作流有些滞后了。不知道大家有没有这种体验:在自己写代码的过程中,大部分情况下是手在等大脑,比如我这个函数怎么构架,我这行代码怎么写会比较好等等,这种情况下编辑的速度慢一些也影响不大,我们的注意力集中在思考上。但是随着对代码越来越熟练,经常借用他人代码并调整的时候,很多工作并不需要我们太多的思考,比如代码块的复制粘贴、参变量名称的修改、找到 Bug 之后小范围调整修改等等,这种情况下往往就变成了大脑在等手完成编辑动作。
在此之前,虽然我说各种快捷键可以灵活地使用,但是无非是 Command 配合方向键端点移动,Alt 配合方向键调换行或者复制行等等这些系统给予的简单的快捷方式。因为没有很好的跳转方法和定位方法,所以此时我对鼠标的依赖非常重,经常需要鼠标拖拽选中、鼠标滚轮加点击定位,小范围就使用方向键移动等等。这样虽然效率不至于非常受到影响,但是极度频繁的鼠标键盘切换还是让人感到心烦。
忍受了一两个月这样的键鼠切换,我终于跑回来求助 Vim 了。说实话刚开始我并没有抱太大的希望,感觉这次还是会像之前那样半途而废。
刚开始只学了一点基础的时候确实很难受,虽然学会了一些小范围的快捷跳转,但是因为还没有完整的学习,导致页面跳转还是要换回鼠标,效率有时候还不如原本的键鼠。并且很多地方更令人烦躁。
我的观点变化是在忍受了这样“半瓶醋”的 Vim 水平两三天之后,决心好好地、系统地学习一下 Vim。然后我就找了一本关于 Vim 的书,里面从头到尾介绍了 Vim 的各种功能和使用,并且提供了实际的案例供参考。在读完这本书之后,我对 Vim 的观点完全转变了。
首先要来排一个坑:想要使用 Vim 确实只需要记住一些基础的操作就可以了,但是想要体验 Vim 的优雅,一定要把 Vim 的功能给完整过一遍,即使一时半会没办法全部记住,但是一定要全部过一遍。因为如果只是使用 Vim 的一些基本操作的话,其实还不如不用,但是如果能将这些基本操作组成一些进阶操作,那么 Vim 的优势就会越来越明显。尤其是跳转、寄存器、宏的部分和一些组合操作,少了这三部分我觉得 Vim 的优雅程度会大打折扣,只可惜我当时 Vim 入门的时候并没有了解到这些,只记住了使用 Vim 的苦。
Vim 并不是说单个操作速度就可以吊打平常的键鼠移动编辑,而是说所有需要用到鼠标的操作,Vim 都可以有简单并且准确的方式去实现,也许在一开始速度上并没有优势,但是它的上限很高。并且,也许我们有鼠标指哪打哪的水平,但是键鼠切换的麻烦是无法避免的,而且考虑到精力消耗,我觉得把鼠标在 4k 的屏幕上对准一个字符或者一个单词实在是烦人,不如盲打来的舒服,不用被有时候多选了一个字符、少选了一个字符反复拖动鼠标而折磨。
Vim 确实有一些学习成本,在刚切换 Vim 的时候我忍受了一阵子的效率损失,不过我的确找到了我喜欢的工具,现在是在缓慢的磨刀阶段,只要练成了 Vim,就可以长期受用。
我在有段时间想搞客制化键盘的时候倒腾过键盘映射,Niz 的一个键盘在空格两侧有两个 Fn 按键,可以对应不同的两层键盘映射,当时我安排了很多功能在里面,比如为了避免右手跳转去用方向键,我把方向键映射成了左 Fn 加上 HJKL,就和 Vim 的一样了。除此之外还有一些比较远又比较常用的按键都被安排在了 Fn 层,比如各类括号,加减等于反斜杠等等,实现了打 Latex 手不需要离开字母区的需求。这些基本的映射固然舒服,但是对于一些比较高级的功能,比如单词选择、字串选择、搜索跳转、定义跳转等等,就只能靠 Vim 来帮忙了。未来如果有可能,我要针对 Vim 客制化一块完美的效率键盘。
我推荐所有在意编辑和输入效率的朋友都去尝试一下 Vim,看一看 Vim 提供哪些进阶的功能,如果可以对上你的口味的话相信你也会想要尝试一下 Vim 的。