vi或vim是linux下非常强大,使用非常普遍的一个全屏幕文本编辑器,vim是vi的高级版本。
多数的linux操作系统都自带vi编辑器。可见其强大与普遍。
下面我们就来学习一下这个神秘的文本年编辑器,网上有人说它很复杂,让我们pai不急待的开始吧。
提示:vi下没有菜单,只有命令。
首先要讲的是vi的三种模式:
- 命令行模式【有的管这个叫编辑模式或者最后一行模式】
 - 命令模式
 - 插入模式
 
其实命令行模式和命令模式的唯一区别就是命令是否可见。命令模式下我们看不到我们输入的命令,命令行模式下我们可以看见我们的命令。
因此有的也将vi分为命令模式和插入模式两个模式。
三种模式的切换方式如下图【非常重要】
 
 

 
 
对于上面的图,我们简单的解释一下,
- 当我们用vi file打开一个文件的时候,默认进入的模式就是命令模式,在这个模式下所敲的键盘上的任何字符都是命令(当然不存在的命令是不会被执行的)
 - 当在命令行模式下敲了 I、i、A、a、O、o 任何一个键,就会进入插入模式。他们的不同意义我们稍后再详解,在插入模式中我们可以编辑我们的文本。
 - 插入模式下按ESC键回到命令模式。(ESC键在我们的linux系统中用的非常的频繁)
 - 命令模式键入冒号,就进入命令行模式,在命令行模式下可以输入好多编辑命令,稍后详解,输入编辑命令后回车即可回到命令模式。
 - 命令行模式下输入“:q!”或者“ :wq”即可退出vi。
 
下面开始详细学习一下几个重要的知识点。
插入命令: 
- i    小写的i在光标前插入文本
 - I    大写的i在光标后插入文本
 - a   小写的a在光标后附加文本
 - A   大写的A在行末添加文本
 - o    在光标下插入新行
 - O   在光标上插入新行
 
插入命令中我们一直没离开光标这个词,那我们怎么移动光标呢,看下面的图我们就知道了。
 

注意上面的命令都是在命令模式下才有用。
上述的khjl均属于移动命令,定位命令,具体的总结如下:
定位命令:
- h  向左移动光标
 - j   向下移动光标
 - l   向右移动光标
 - k  向上移动光标
 - $  光标移动到行尾
 - 0  光标移动到行首
 - H 移动到屏幕的顶部
 - M 移动到屏幕的中间
 - L  移动到屏幕的底端
 
上面的定位命令都比较简单,或者说移动的范围都是本屏幕内。下面的则更强大。
- :set nu ,设置显示行号,:set nonu表示不显示行号。
 - gg 到文本的第一行
 - G 到文本的最后一行
 - nG 到第n行
 - :n  到第n行(建议大家使用这个)
 
删除命令:
vi中的删除命令,除了在插入模式中直接使用退格来操作外,还有大量实用的命令。
- x 删除当前字符,即光标所在的位置
 - nx 删除光标后面多n个字符。
 - dd 删除光标所在行
 - dG 删除光标所在行到末尾的内容
 - :n1,n2d  删除n1 到 n2的行。
 
复制黏贴命令:
vi对复制粘贴支持的也非常不错,具体如下:
- yy、Y 复制当前行
 - nyy、nY 复制当前行下面n行
 - dd 剪切当前行
 - ndd 剪切当前行下面n行
 - p、P粘贴光标所在行下或者行上。
 
替换命令:
- r  替换光标所在处的命令,按完r后直接输入要替换的命令既可以,直后按esc
 - R 替换光标及以后的字符,esc结束。
 
撤销命令:
vi中的撤销命令是u(undo),其中vi可以撤掉一次,vim可以撤掉多次。