持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
前言
每天一个进阶 Vim 命令,帮助我们提升研发效率!
今天我们来学习 . 命令。为什么要学习这个命令呢。其实和我们的工作也是很大关系的。本质上讲,我们的工作是重复性的。不论是在几个不同的地方做相同的小改动,还是在文档的相似结构间移动,我们都会重复很多操作。凡是可以简化重复性操作的方式,都会成倍地节省我们的时间。
Vim 对重复性操作进行了优化。它之所以能高效地重复,是因为它会记录我们最近的操作,让我们用一次按键就能重复上次的修改。这个命令就是 . 。下面,我们来看一下 . 命令在日常工作中的使用场景。
下面我们来看一下 . 命令使如何工作的。
. 命令介绍
要理解 . 命令的强大,我们需要意识到这一点:“上次修改”可以指很多东西,一次修改的单位可以是字符、整行,甚至是整个文件。
我们来看一下一个简单的例子,为每行末尾添加 ;。
行尾添加分号步骤
我们先举一个例子,假设有如下文本,我们将要为每一行添加一个 ;,
Line One
Line Two
Line Three
Line Four
- 首先我们先来看下光标位置,此时光标位置在第一行首字母
L处,然后我们执行$a;<Esc>命令,来将光标移至末尾,并完成插入操作;此时光标在第一行末尾;处; - 然后我们执行
j$.或者j$a;<Esc>命令就可以给第二行末尾添加;,一个.命令相当于a;<Esc>三个命令; - 我们可以用同样的命令,来给第三行、第四行末尾添加上
;;
移动命令进化
我们再来看一下上述命令 j$.,在这个命令中,j 命令使光标下移一行,而 $ 命令把光标移到行尾。我们用了两下按键,仅仅是为了把光标移到指定位置,以便可以使用 . 命令,那么,这个移动操作还有没有什么改进的地方呢?
当然有!
Vim 会对一些命令进行封装,使命令更加简化,比如,a 命令在当前光标之后添加内容,而 A 命令则在当前行的结尾添加内容。不管光标当前处于什么位置,输入 A 都会进入插入模式,并把光标移到行尾。即命令 A 是对 命令 %a 的封装。
对于上述末尾的插入操作,我们可以使用 A 来代替 $a,然后重复执行多次 j. 命令,就可以完成后续的修改。
复合命令列表
下面我们来看看有哪些复合命令。
| 复合命令 | 等价命令 |
|---|---|
C | c$ |
s | cl |
S | ^c |
I | ^i |
A | $a |
o | A<CR> |
O | ko |
参考文档
- 《Vim实用技巧》—— [英]Drew Neil