Vim 进阶学习(一)—— 重复命令 .

290 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

前言

每天一个进阶 Vim 命令,帮助我们提升研发效率!

今天我们来学习 . 命令。为什么要学习这个命令呢。其实和我们的工作也是很大关系的。本质上讲,我们的工作是重复性的。不论是在几个不同的地方做相同的小改动,还是在文档的相似结构间移动,我们都会重复很多操作。凡是可以简化重复性操作的方式,都会成倍地节省我们的时间。

Vim 对重复性操作进行了优化。它之所以能高效地重复,是因为它会记录我们最近的操作,让我们用一次按键就能重复上次的修改。这个命令就是  .  。下面,我们来看一下  .  命令在日常工作中的使用场景。

下面我们来看一下 . 命令使如何工作的。

. 命令介绍

要理解 . 命令的强大,我们需要意识到这一点:“上次修改”可以指很多东西,一次修改的单位可以是字符、整行,甚至是整个文件。

我们来看一下一个简单的例子,为每行末尾添加 ;

行尾添加分号步骤

我们先举一个例子,假设有如下文本,我们将要为每一行添加一个 ;

Line One
Line Two
Line Three
Line Four
  1. 首先我们先来看下光标位置,此时光标位置在第一行首字母 L处,然后我们执行 $a;<Esc> 命令,来将光标移至末尾,并完成插入操作;此时光标在第一行末尾 ; 处;
  2. 然后我们执行 j$. 或者 j$a;<Esc> 命令就可以给第二行末尾添加 ;,一个 . 命令相当于 a;<Esc> 三个命令;
  3. 我们可以用同样的命令,来给第三行、第四行末尾添加上 ;

移动命令进化

我们再来看一下上述命令 j$.,在这个命令中,j 命令使光标下移一行,而 $ 命令把光标移到行尾。我们用了两下按键,仅仅是为了把光标移到指定位置,以便可以使用 . 命令,那么,这个移动操作还有没有什么改进的地方呢?

当然有!

Vim 会对一些命令进行封装,使命令更加简化,比如,a 命令在当前光标之后添加内容,而 A 命令则在当前行的结尾添加内容。不管光标当前处于什么位置,输入 A 都会进入插入模式,并把光标移到行尾。即命令 A 是对 命令 %a 的封装。

对于上述末尾的插入操作,我们可以使用 A 来代替 $a,然后重复执行多次 j. 命令,就可以完成后续的修改。

复合命令列表

下面我们来看看有哪些复合命令。

复合命令等价命令
Cc$
scl
S^c
I^i
A$a
oA<CR>
Oko

参考文档

  • 《Vim实用技巧》—— [英]Drew Neil