vim是一个多模式的编译器,本文讲解常用的五种模式。
vim是一个指令,输入vim然后回车就可以看见vim的相关信息。

既然vim是编辑器,那么现在就先创建一个文件。然后用vim进行代码的编写。

如上图所示,现在已经创建了code.c文件
c
vim code.c
输入后按下回车即可进入code.c文件。
如果vim code.c 这行命令中,如果没有文件code.c,那么就会先创建code.c文件再进入该文件

使用vim进入code.c文件时,是命令模式。一般来说现在在键盘上输入内容是无法输入的。要想输入内容可以先按键盘上的 i 键。

输入 i 之后可以发现左下角有INSERT,现在就处于插入模式。我们就可以开始代码的编写。

在编写完代码后,想要回到命令模式,按下键盘左上角的 Esc 键就可以返回命令模式。

现在就已经回到了命令模式。
注:下面会多次出现类似Ctrl + g的符号,表示按下Ctrl和g。而不是按下Ctrl和符号+和g
编写完代码后就可以保存退出code.c文件。想要保存这个文件要进入底行模式。想要从命令模式进入底行模式要输入符号 : (shift + 符号 ; = 符号 : )

输入之后,现在光标位置就在最底行,现在就是底行模式输入wq(保存退出,w:保存、q:退出)再加上回车就可以保存并退出该文件。

现在已经出现了三种模式,分别是命令模式、插入模式和底行模式。
在命令模式下,可以输入 i 进入插入模式。在插入模式中可以按下Esc键返回命令模式。
在命令模式下,输入符号 : (shift + 符号 ; = 符号 : )就可以进入底行模式。在底行模式可以按下Esc键返回命令模式。
这里需要注意,不能从插入模式直接切换到底行模式,也无法从底行模式直接切换到插入模式。插入模式要切换到底行模式就必须先切换到命令模式,在从命令模式切换到底行模式。底行模式切换到插入模式同理。
现在画个图来展示一下这三种模式之间的切换。

现在来讲解命令模式下的相关操作。
在使用vim的时候,是不能使用鼠标来定位。所以现在先讲光标定位。
光标定位:
为了更好的讲解,先切换到底行模式,然后输入set nu再进行回车,就可以显示行号。

现在就能够显示行号,如下图:

现在能够看见光标在第一行。想要让光标移动到末尾行。就用键盘输入 G (shift + g = G),移动效果如下图:

现在光标成功的移动到了末尾行,那现在想要回到首行就可以输入gg。移动效果如下图:

现在已经能使光标移动到首、尾行。如果现在想让光标移动到第4行就可以先输入4 再输入gg就可以移动到第4行,移动效果如下图:

所以想要把光标移动到指定行就可以先输入 n (n为行号)再输入gg。
或者输入n之后再输入大写的G(shift + g = G)也可以达到同样效果。
假如现在有一行代码,这一行代码的内容有很多。如下图:

现在想要把光标从这一行的开头移动到这一行的结尾。
就可以输入符号 (shift + 4 = 符号)
移动效果如下图:

把光标移动到这一行的开头就输入符号 ^ (shift + 6 = 符号^),移动效果如下图:

在vim中上下左右键的移动光标建议用h、j、k、l代替。(l是L的小写,不是 i ,注意区分)
h:左
j:下
k:上
l:右
上面已经知道了h是向左移动光标,l是向右移动光标。

当前光标在第7行的开头,假设现在要把光标移动到第7行里面的第二个printf,使用l键向右移动就要连续按多次才能到第二个printf。比较麻烦,这时候就可以使用w。
w可以让光标以单词为单位向右移动,这里演示按1次w的效果,如下图:

b可以让光标以单词为单位向左移动,这里演示输入1次b的效果,如下图:

在上面的gg和G都可以先输入指定的数字,再输入gg和G。
w和b可以这样使用,现在来演示先输入3再输入w的效果:

这里就向右移动了3个单词的位置。
如果现在需要复制,那么就可以输入yy。yy这个命令的功能就是复制光标所在行的内容。
粘贴就可以使用p,命令p的功能就是把复制的内容粘贴到光标所在行的下一行。效果图如下:

同样的yy和p也可以配合数字来使用,比如现在我要把3到8行的内容复制,然后粘贴到第8行之后。就可以先让光标移动到第三行,然后先输入6再输入yy。此时第3行到第8行的内容就已经被复制,再让光标移动到末尾,再输入p就可以粘贴,如下图:

如果需要粘贴多份,比如现在要再粘贴5分,就可以先输入5再输入p就可以一次性粘贴5次,如下图:

现在来讲 u 和 Ctrl + r 。
u是撤销,Ctrl + r是把撤销给撤销。
比如我现在不小心把所有内容给删除了。那么就可以使用u来撤销我前面的操作,内容就会恢复。如果现在再输入Ctrl + r,就可以撤销刚刚的撤销操作。
剪切操作:
现在让光标移动到第5行

现在使用dd就会发现当前行的内容被剪切掉了。

此时再按下p就可以把刚刚剪切的内容粘贴出来。

如果只用dd不使用p。就可以把dd当作删除。因为你只进行了剪切而没有粘贴,就相当于删除当前行
同样dd也可以配合数字使用,先输入数字再输入dd就可以剪切多行的行为,这里不做演示。
命令模式的行内局部删除 x 和 X (shift + x = X)
x删除当前光标所在位的内容

再输入1次x

X:删除当前光标的前面一位
当前光标位置如下:

输入1次X的效果如下:

x和X也可以配合数字使用,不过多赘述。
快速切换大小写可以使用波浪号 ~ (shift + ` = ~)符号 ` 在左上角Esc的下方。
~:且换当前光标所在位置字符的大小写

当前光标在p这里,现在输入~

把光标移动到P,使用~

文本替换:
当前光标所在位置,如下图:

假设现在向要把 p 给替换成 x ,那么就可以先输入r。就可以选中当前光标,然后在输入x,替换后如下图:

r也可以配合数字使用,现在光标在x这里,如果现在先输入5再输入r,就可以选中当前位置向后4个位置,一共5个位置,然后再输入p,就可以把内容都替换成p,如下图:

数字加上r就可以进行小范围的替换。
现在再来讲R(shift + r = R)
输入R之后,就可以发现左下角变成了REPLACE

现在就从命令模式转换到替换模式。
在替换模式下就可以输入内容,输入的内容会替换掉当前光标所在位置的内容

现在输入bbbbbbb,就能发现覆盖了原光标所在位置的内容,如下图:

想要从替换模式转换成命令模式,按下Esc键即可转换成命令模式。
前面说过在底行模式下输入wq可以保存退出vim,在命令模式下也可以保存退出vim。
在命令模式下输入ZZ(按下shift键不放,在按下两次z相当于输入了两个ZZ)就可以保存退出vim。
补充一下底行模式的内容:
w保存
q退出
wq保存退出
w!强制保存
q!强制退出
wq!强制保存退出
set nu显示行号
set nonu取消显示行号
/输入内容:在底行模式下,输入斜杠/然后在斜杠的后面输入内容,会定位到有你输入内容的行的位置。比如现在输入/printf,效果如下:

按下回车键:

此时输入n就可以定位下一个printf的位置

在底行模式下用vs加上其它文件名称 就可以实现分屏操作
现在还有一个文件code.h,现在用code.c文件的底行模式下输入vs code.h就可以分屏操作。

在两个屏幕内进行光标的移动可以使用Ctrl + ww
现在光标在左边,输入Ctrl + ww 观察光标的位置,如下图:

发现光标切换到右边了,想要回左边就再使用一次Ctrl + ww即可,这里不截图演示。
批量化操作:
这里以批量化注释为例:

注释第8行到第12行的内容。
先让光标移动到第8行

输入Ctrl + v

观察左下角发现VISUAL BLOCK,此时从命令模式进入视图模式。通过h、j、k、l来选中要批量操作的范围。现在要注释第8行到12行的内容,使用j来让光标移动到第12行

此时能够发现选中了8到12行的第一列的位置。现在输入I(I是i的大写,shift + i = I)

观看左下角发现进入插入模式,现在输入//

最后按下Esc键

发现回到了命令模式,并且对刚刚选中的部分进行了批量处理。
现在把注释批量化去除。
还是先让光标先移动到指定位置。然后输入Ctrl + v

通过h、j、k、l、来把注释所在位置选中

此时输入d就可以把选中的内容删除,如下图:

这样就实现了批量注释和批量去除注释。
同理可以实现批量化插入,上面的批量化注释就是在指定位置插入了//,把//换成需要插入的内容就是批量胡插入。这里就不做演示了。
最后画一张图,来展示这5中模式的转化。
