网上对 Vim 的说法往往是「学习曲线陡」、「入门门槛高」,等等。很多人也因此在对 Vim 稍有了解之后就对 Vim 望而却步,怕影响工作效率或者认投入相比产出不划算而没有真正走进 Vim 的大门。
确实,Vim 不像其他编辑器一样上手即用,但是也远没有那么可怕。花个一晚上时间熟悉最基础的十来个命令,在你常用的编辑器上装一个 Vim 插件,例如 vscodevim、IdeaVim,Vim 就算入门了。
读完这篇入门文章,花个把小时时间熟悉一下本文中的操作,然后回到你平常写代码的地方,放下普通的编辑器,用 Vim 来编辑,你会发现,转向 Vim 的第一天,工作效率并没有降低,甚至可能反而略有提升。
Vim 的大门就此打开,之后的学习曲线平缓而温和, edit text at the speed of thought!
新建一个文本文件并填充一些没有用的代码或者文本,这里将是你练习 Vim 操作的地方。
在终端中用 vim
打开这个文本文件,或者通过前面提到的插件激活编辑器的 Vim 模式并打开这个文件。
强烈建议你边看本文边操作,操作的过程也是记忆的过程,看完本文基本你已经记了个七七八八,很多命令马上就可以信手拈来了。
开始
现在,我们处在 Vim 的普通模式。
普通模式
普通模式下无法直接通过打字输入的方式对文本进行编辑,但是可以移动光标,或是执行一些命令。
普通模式是 Vim 的默认模式,也是 Vim 最自然放松的状态,这也是 Vim 和其他编辑器不同的地方。
随着对 Vim 了解的深入,你逐渐就会知道 Vim 为什么是这样的。
移动光标
在 Vim 中,我们可以通过 j↑
k↓
h←
l→
四个按键来移动光标。
j
k
l
正好在右手的食指、中指、无名指下面,手掌不用移动就能按到。
h
在右手食指左边的一个位置,刚刚接触 Vim 的时候可能会觉得不方便,但是掌握了本文下面提到的一些命令,以及一些更加复杂的操作之后你就会发现,需要连续按超过一次 h
或 l
的操作,大部分都可以通过其他命令实现。使用最多的,也就是 jk
上下两个。
插入模式
在普通模式下按 i
就进入了插入(insert)模式。
插入模式下的 Vim 和普通的编辑器差不多,用方向键移动光标,键盘输入打字。
学会了移动光标和最简单的打字输入,你已经可以用最基础的方式进行文本编辑了。
但是,Vim 强大的功能此刻还完全没有露头,下面要讲的,才是让 Vim 可以进行高效文本编辑的所在。
移动光标的更多操作
前面提到的 hjkl
一次只能让光标移动一个字符,而下面这些操作可以让光标跳跃移动。
b
w
分别移动到前、后单词的开头,代表 backward,forward one word 。
e
ge
分别移动到后、前单词的结尾,代表 end。
0
$
分别移动到行首和行尾。
^
(shift 6
)和 0
相似,但是是移动到当前行的第一个非空字符。
命令 | 用途 |
---|---|
b | 移动到当前/上一个单词的开头 |
w | 移动到下一个单词的开头 |
e | 移动到当前/下一个单词结尾 |
ge | 移动到上一个单词结尾 |
0 | 行首 |
$ | 行尾 |
^ <⇧ 6> | 第一个非空白字符 |
删除
下面来看一下删除的操作。
x
可以删除光标下的字符,X
删除光标前面的字符。
d
在 Vim 中代表 delete 删除,Vim 中的删除通过按 d
再加要删除的范围来实现。
删除的范围可以看下面这个表格。
d
加方向键可以删除对应方向上的一个字符(上下方向则删除一行)。
顺带一提,在 Vim 的普通模式下先输入数字 n
再输入命令,即可执行 n 次命令,例如 d5j
就表示向下删除 5 行。
前面提到的按单词移动光标和移动到行尾行首的命令,也可以指定删除的范围,例如 db
删除光标起始到单词开头,d$
从光标位置删除到行尾。
连按两次删除, dd
命令可以删除整行。同样,也可以用数字加命令的方式一次删除多行。
此外,还有等于 delete a word 的 daw
,删除一个单词,和 delete n words 的 d{n}w
,删除多个单词。
命令 | 用途 |
---|---|
dh | 删除前一个字符(d← ) |
dl | 删除一个字符(等同于 x or d→ ) |
d5j | 删除 5 行 |
db | 删除光标起始到单词开头 |
d$ | 从光标位置删除到行尾 |
dd | 删除 1 行 |
{n}dd | 删除 n 行 |
daw | 删除一个单词 |
d{n}w | 删除 n 个单词 |
花样进入插入模式
前面提到的 i
只是简单地在当前光标所在的位置进入插入模式,而 Vim 提供了一些命令让我们可以更快地移动到目标位置并插入。
a
代表 append 追加,会在当前光标位置的后面进入插入模式。
在普通模式下按 o
,会在光标当前所在的行下面创建一个新行并进入插入模式,代表 open。
s
会删除当前光标下的字符并进入插入模式。
这三个命令还分别有与之匹配的大写命令,实现相似的操作。
A
会在当前行的末尾进入插入模式,O
会在当前行的上面创建一个新行并进入插入模式,S
会删除整行并进入插入模式。i
也有与之匹配的 I
,在当前行的第一个非空字符处进入插入模式。
命令 | 进入插入模式的位置 |
---|---|
a | 在当前光标之后 |
A | 在当前行的结尾 |
i | 在光标位置 |
I | 当前行的第一个非空字符处 |
o | 在下面插入新行 |
O | 在上面插入新行 |
s | 删除光标下的字符 |
S | 删除整行 |
撤销操作
不小心删除了不该删除的文本怎么办?在 Vim 中,u
代表 undo,可以撤销最近的一次操作。
命令模式
如果你是在终端当中用 vim
命令进行编辑,那你可能经常要和 Vim 的命令模式打交道。
按 :
进入 Vim 的命令模式,输入命令再按回车即可进行相应的操作。
:w
代表 write,:q
代表 quit。
命令也可以一次输入多个,例如 :wq
- 保存并退出。
命令后加 !
代表强行执行,例如 :q!
- 不保存而强行退出。
All in Vim!
现在,你已经掌握了最基本的插入、删除和撤销操作,足以应付简单的日常工作了。
下一篇文章,我们来介绍一些进阶操作,让你的 Vim 更上一层楼。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。