百宝箱:Vim进阶之路

创建于更新于文集:百宝箱

前言

工欲善其事,必先利其器。强大的工具能提升工作效率,节约时间让我们做更多的事情。通过搜索引擎可以查询到很多某某方面的某工具,不过照搬照用未必就是最好的,在工具使用过程中有时也需要些思考,打磨出最适合自己的工具,于是我决定写一系列博客来记录一下个人工具链的打造过程。

Vim是我使用时间最长的编辑工具了,我想在Vim的使用方式上一共经过了三个阶段,才慢慢获得了个人目前来说最合适的编辑体验,这篇博客也是要记录一下这个过程(并不是入门指南或插件推荐之类的文章)。

Stage0

一段时间内,我使用一台陈旧的Ubuntu机器编程,没法使用Visual Studio这样的IDE,Vim是为数不多的选择之一,这个时候Vim对我来说就是一个不占内存、编辑方式独特的编辑器。

一个连续的编辑体验,最好应该不使用鼠标,大多数人应该都不愿意在编辑过程中不得不腾出一只手来操控鼠标。

Vim独特的编辑模式可以让我们轻松摆脱鼠标,但是如果没有摆脱鼠标思维,那仍然难以获得最佳的编辑体验。举例来说,在normal模式下,假如光标此时在行首,对于一个忘记加分号的段落:

let foo = 30

我会不断按l键,将光标移动到行尾,再按下a键修改。当然这略有些夸张,但大致如此。尽管我已经习惯了手不离开键盘移动光标,但这仍然是鼠标思维。仔细想想,这和在普通编辑器中直接移动鼠标,点击要修改部分的末尾,按删除键,再输入并没有太大区别。尽管Vim有多种模式,但我大部分时间都在插入模式上。

Stage1

我开始慢慢意识到,虽然我摆脱了鼠标的使用,但仍没有摆脱鼠标式的思维方式。我开始记忆更多的快捷键,更多的技巧。除了预装的vimtutor,我还收集了一些有关Vim技巧的文章,通过反复练习加强记忆。

例如,进入插入模式不只是用io向下新建一行并插入,O则向上新建一行,aApP等同理,虽然这些在初识Vim时就已经知道了,但是缺乏练习还是会让人很快遗忘。

在这一阶段,我对Vim的正常模式、命令模式、可视模式等模式的使用率也提高了,例如ce快速改变单词,ci"修改引号内内容,~改变大小写,:s/foo/bar/g快速替换等等,鼠标操作的思考模式渐渐减少。

Stage2

一个编辑器还不至于上升到哲学的高度,但是要高效使用Vim,确实需要一些思维方式的转变,记住快捷键很重要,但在使用时也要有点思考,并渐渐将思考转变成肌肉记忆。

有些Vim老手会玩一种叫VimGolf的游戏,简单来说就是比拼对于一个编辑操作使用更少的按键,例如上个例子中在行末加分号,比较几种不同方式:

1 多次l到行尾,按a键,输入分号,按键数为行字符数+1 2 使用$到行尾,再按a键,输入分号,按键3次 3 按下A键,输入分号,按键2次

在以上方法中,显然第三种按键更少,更节省时间。渐渐多思考如何更少的按键,我能感到编辑速度变得更快了。

再举个例子,在下面这段代码中的操作符两旁加空格:

1+3+89+18

1 移动再插入 2 f+s + ,之后用;.重复查找修改操作 3 :%s/+/ + /g使用命令模式来替换

第一种显然低效,第二种相比第一种的方便之处在于,它将鼠标式思维的在加号前后两处添加空格,改成了可以重复的,查找加号,替换加号的一次查找替换操作,鼠标思维的前面添加->移动光标->后面添加变成了一次替换编辑操作。可重复在Vim中非常重要,;可以重复上一次f的查找操作,.可以重复上一次编辑操作。

第三种方式则是一步到位,可以将:%s换成:1,4s将替换范围限制在1到4行,可以按下V:,则自动将当前行作为替换范围,还可以将最后的g替换成c,在每次替换时手动确认等等。

在这个例子中,当有多个行,大量需要修改时,第三种方式更便捷,但有时,第二种方式,或者说,构造可重复操作可能更好。例如在多行行首添加#符号,可以按I#,再不断用j.重复操作。甚至可以用宏,录制一些可以重复的复杂操作。

总结

虽然这篇博客一直在说Vim,但是即使是使用其它编辑工具,要想提高效率,多练习、多思考是必不可少的。另外,虽然我很喜欢使用Vim,但是还是要说,绝对不推荐编程新手使用Vim,单单从功能齐全来说,我认为没有任何一个编辑器可以和IDE相比较,虽然可以配置很多插件来优化体验,但是插件配置需要花时间,并且大量插件也弱化了编辑器“轻量级”的优势,所以并不推荐新手使用Vim。技巧、工具,是手段,提高效率,才是目的。

Copyright © 2020-2021 公子政的宅日常