vim 从嫌弃到依赖(5)——普通模式的一些操作
通过前面几章内容的铺垫,基本已经介绍完了普通模式的大部分内容,按照进度下面会依次介绍插入模式、命令模式、选择模式的一些操作。根据不同模式提供功能的多少和使用频率,篇幅会有长有短。本来这篇文章应该介绍插入模式的。但是我在整理最近写的内容的时候发现我忘记了一些不太常用但是很好用的一些小技巧,所以这篇文章我们还是停留在普通模式下。
快速翻阅文本
跳转光标的操作,之前介绍过 h j k l w
等操作,但是在阅读代码的时候,仅仅根据这几个操作,效率着实有点低,即使使用类似 数字 + j/k
的方式来进行行间跳转,效率也一般。这里再介绍几个操作
- ctrl + f: 向下翻页
- ctrl + b: 向上翻页
这里没有什么具体的例子,各位小伙伴只需要找到一个大一点的文件试试就能看到效果
除了使用这种翻到下一页或者上一页的操作之前,还可以相对于光标滚屏
- zt: 将光标所在行移动到窗口顶端
- zb: 将光标所在行移动到窗口底端
- zz: 将光标所在行移动到窗口中央
这个提供两个问题:
- 为什么没有将他们放到前面跟
h j k l
这类的操作一块讲呢,当然是因为我忘记了啊。。。。这个理由虽然很重要,但是并不是主要理由。大家可以先猜猜。 - 既然这个操作能大幅度提高我们阅读代码的效率,那为什么使用频率还会这么低呢
有兴趣的小伙伴可以先不看后面的解答,自己操作一下,特别是在认真阅读代码的时候。可能就会有跟我下面说的一样的体验
好了,现在公布我的答案:
- 针对问题一,我的答案是,这几个操作并不属于
motion
那一类,小伙伴们在试验的时候可以仔细观察一下光标,光标相对于窗口的位置其实并没有发生变化。 - 大家在阅读代码的时候使用它们会不会觉得跳转太多了,每次跳转都感觉跟前面读过的衔接不上呢。体验非常不好,还不如我一直使用
jjjjjjjjj
甚至10j
之类的操作。现在我采取折中的办法,就是翻页的快捷键我用,但是我将其映射为了10j
(如何映射快捷键以及如何定制自己的vim在后面说)
撤销
撤销在普通模式下使用 u
,反撤销使用 Ctrl+r
vim的撤销是撤销上次修改,结合之前介绍的.
命令的部分,我们可以知道上次修改指的是从进入插入模式那一刻起到退回到普通模式为止,进行的一系列的修改。根据这个特征,我们可以很方便的定义撤销哪些内容。例如在写这篇文章的时候我进入插入模式进行编写。然后在需要构思的地方退回到普通模式,想到了一些再次进入插入模式编辑,一旦发现有问题就可以在普通模式下撤销上次的修改。
例如下面的例子:
- 我们先使用
cw
替换一个单词,然后删除一行。
- 使用
u
恢复上一次的修改,也就是恢复删除的一行
- 使用
ctrl + r
执行反撤销,即再次删除上次恢复的一行
u
和ctrl+u
是操作符,它们符合之前介绍的operat = 数字 + operator
的公式,因此如果想要恢复到最开始的状态,可以使用2u
普通模式下对数字文本进行递增递减操作
假设我们这么一段代码
var foo = 5 + i;
现在希望改为
var foo = 10 + i;
我们当然可以使用cw
来删除5,然后在插入模式下写入10。但是这里要介绍一个新的方法——使用 Ctrl + a
来在数字文本上进行递增操作,它也是一个操作符。符合之前的公式。这里假设光标在 5 的位置,然后执行 5 Ctrl+a
来实现将5这个数字文本递增5个的操作
递减操作使用 Ctrl x
。
下面请各位试试这么几种情况:
- 如果光标不在数字位置,执行
Ctrl a
会发生什么呢? - 假设代码中有不止一个位置有数字,光标也不在某个具体数字上,执行
Ctrl + a
又会发生什么呢? - 当前行没有数字,在后面几行有数字,执行
Ctrl a
会发生什么呢?
下面公布答案
如果光标不在数字所在位置,该命令会在本行往后查找第一个出现数字的地方,并将光标跳转到该处,然后执行加1的操作。
花了这么多篇幅总算将普通模式下的一些操作说完了,后面将会进入按照顺序分别讲述,插入模式、选择模式、命令模式。请感兴趣的小伙伴关注一下本专栏,有想要了解的内容也欢迎留言,等我按计划更新完了我想写的内容之后会考虑安排上的,在此谢谢小伙伴的捧场