vim是一个文本编辑器。虽然目前有很多编辑器可选,但是vim很可能是在没有图形界面情况下的唯一选择,因此还是有必要了解此编辑器。
如果之前没有使用过终端中的文本编辑器,可能会对vim有很多的不适应。需要说明的是,vim是为终端设计的编辑器,这意味着此编辑器在没有鼠标的情况下进行操作。此编辑器的操作逻辑(很大程度来来源于vi)具有很长的历史,这一方面导致它的逻辑不太能被新用户接受,另一个方面也说明这种操作逻辑的健壮性。
三种模式
vim具有三种模式:一般模式、编辑模式和命令模式。
打开vim后,就进入了一般模式,在这种模式中,常用的操作就是光标的移动和行的操作,比如行的复制、粘贴和删除等。
可以从一般模式进入编辑模式和命令模式,编辑模式与图形化的编辑器(比如记事本、写字板等)非常相似,可以进行字符级别的操作。
命令模式的常用操作是搜索、替换、读取、保存和对编辑器的设置(比如设置行号和缩进)等操作。
打开、编辑、保存、退出
使用vim打开一个文件很简单:
$ vim hello.txt
上面的命令会使用vim打开hello.txt
文件,如果hello.txt
存在,那么将打开该文件;如果不存在,那么将创建并打开该文件。
进入vim程序后,就进入了一般模式,这个时候可以使用按键h
、j
、k
、l
移动光标,分别表示光标向左、上、下、右4个方向移动。
按键 | 功能 |
---|---|
h |
向左移动光标 |
j |
向上移动光标 |
k |
向下移动光标 |
l |
向右移动光标 |
下面是一个动图示例:
为了便于读者理解,动图中终端右侧的提示表示实际的按键。
按i
键即可进入编辑模式,也可以使用其他按键:
按键 | 功能 | 按键 | 功能 |
---|---|---|---|
i |
从光标处插入 | I |
所在行第一个非空白字符处插入 |
o |
所在行下面插入新行并在新行插入 | O |
所在行上面插入新行并在新行插入 |
a |
光标处下一个字符插入 | A |
所在行最后字符后插入 |
按i
键后,就会进入编辑模式并从光标处开始插入,这时移动光标需要使用键盘上的箭头按键。使用i
进入编辑模式后,vim窗口左下方会显示-- INSERT --
字样,表示用户正在插入(编辑)模式。
对文件修改完成后,使用 ESC 键返回一般模式。
下面是动图示例:
返回一般模式后,使用命令模式对文件进行保存。
在一般模式中输入:
即可进入命令模式,此时vim窗口左下方会显示:
,之后输入w
表示写入文件,即:w
表示写入文件;:q
表示离开vim;:wq
表示写入文件后离开vim。
下面是动图示例:
至此,我们从一般模式按i
键到编辑模式,编辑后按ESC
键到一般模式,在命令模式进行保存和离开,完成了对一个文本文件的编辑。
下面是几个命令模式中常用的命令:
命令 | 功能 |
---|---|
:w |
写入文件 |
:q |
离开 |
:q! |
强制离开 |
:wq |
写入文件并离开 |
:w filename |
将文件另存为filename文件 |
:n1 n2 w filename |
将n1~n2行另存为filename文件 |
:! command |
暂时到shell中执行command命令 |
:set nu |
显示行号 |
:set nonu |
不显示行号 |
下面是设置显示行号和不显示行号的动图示例:
一般模式
如上所述,在一般模式中,可以使用h
、j
、k
、l
移动光标,分别表示光标向左、上、下、右4个方向移动。
下面是一般模式中的常用的操作:
按键 | 功能 |
---|---|
Ctrl + f
|
下一页 |
Ctrl + b
|
上一页 |
0 |
移动光标至本行开头 |
$ |
移动光标至本行末尾 |
gg |
移动光标到第一行 |
nG |
n为数字,移动光标到第n行 |
G |
移动光标到最后一行 |
n<Enter> |
n为数字,光标向下移动n行 |
下面是使用gg
和G
在行之间移动光标的动图示例:
一般模式中可以对行进行复制、粘贴和删除的操作,下面是常用的操作:
按键 | 功能 |
---|---|
yy |
复制光标所在行 |
nyy |
n为数字,复制光标所在行(包含)向下n行 |
p |
在光标所在行下面粘贴 |
P |
在光标所在行上面粘贴 |
dd |
删除光标所在行 |
ndd |
n为数字,删除光标所在行(包含)向下n行 |
下面是使用yy
复制,p
粘贴,在使用ndd
删除的动图示例:
还可以使用.
(英文句号)键进行重做操作,u
键进行撤销操作。
搜索与替换
在命令模式中进行搜索与替换:
命令 | 功能 |
---|---|
/word |
向下搜索word |
?word |
向上搜索word |
n |
搜索下一个 |
N |
反向搜索下一个 |
:n1,n2s/word1/word2/g |
n1,n2为数字,在n1~n2行中用word2替换word1,替换时不询问 |
:1,$s/word1/word2/g |
第一行至最后一行(全文)用word2替换word1,替换时不询问 |
:n1,n2s/word1/word2/gc |
n1,n2为数字,在n1~n2行中用word2替换word1,替换时询问 |
下面是一个在vim中搜索的动图示例:
区块操作
vim还支持区块操作:
按键 | 功能 |
---|---|
v |
字符选择 |
V |
行选择 |
Ctrl + v |
区块选择 |
y |
复制区块 |
d |
删除区块 |
下面是区块操作的动图示例:
多窗口
vim支持多窗口操作,下面是常用的操作:
命令或按键 | 功能 |
---|---|
:sp filename |
横向新窗口打开filename文件 |
:vsp filename |
纵向新窗口打开filename文件 |
Ctrl + w 之后 [hjkl]
|
将光标移动到左、上、下、右侧窗口 |
下面是两个纵向窗口的动图示例: