vi的使用存在三种模式:一般模式,编辑模式,命令行模式
一般模式:打开文件时默认的模式,具有光标移动、删除、复制、粘贴等行为
编辑模式:对文件进行修改等行为,通过按键“a,A,i,I,o,O,r,R”从一般模式转入编辑模式,通过ESC按键退回一般模式
命令行模式:可对文件进行读取、保存、退出、查找文本内容、替换文本内容、显示行号等行为,一般模式下通过按键“:,/,?”转入命令行模式
PS:编辑模式下不可以直接转换成命令行模式
1、文件打开
命令:vi 文件名称
文件名称需要包括后缀,如果文件不存在,则会新建,此时处于一般模式
2、进入编辑模式
按下“a,A,i,I,o,O,r,R”就可以转换为编辑模式
a,表示在当前光标的字符后面插入;A,表示在在光标所在行的最后一个字符后面插入
i,表示在当前光标的字符前面插入;I,表示在光标所在行的第一个非空格符前面插入
o,表示在当前光标所在行的下一行插入;O,表示在当前光标所在行的上一行插入
r,表示在当前光标的字符进行一次替换;R,在当前光标的字符进行连续替换(替换字符后光标会后移)
3、回到一般模式
按下ESC转换成一般模式
4、保存文件
一般模式下,输入:w将内容写入到文件,输入:w!强制将内容写入到文件(能否写入与权限有关)
输入:q离开vi,输入:q!强制离开vi
输入:wq将内容保存后离开,输入:wq!强制保存后离开(能否写入与权限有关)
输入ZZ,若文件未修改,则不保存离开,若文件已修改,则保存后离开
输入:w [文件名称],则把内容保存到另外一个文件中
输入:n1,n2 w [文件名称],把n1到n2行的内容保存到另一个文件中
5、光标的移动
常用的↑↓←→,有四个按键可以代替它们,h=← j=↓ k=↑ l=→
+,移动到光标所在的下一行;-,移动到光标所在的上一行
0或者Home,移动到光标所在行的第一个字符;$或者End,移动到光标所在行的最后一个字符
n(某个数字)+<space>(空格键),光标移动到所在字符的右边n个字符位置
H,光标移动到当前屏幕的第一行的第一个字符;M,光标移动到当前屏幕的中间一行的第一个字符;L,光标移动到当前屏幕的最后一行的第一个字符;G,光标移动到文件的第一行的第一个字符;nG(n为某个数字),移动到文件的第n行的第一个字符;gg,移动到文件的第一行的第一个字符;n + enter(n为数字),光标向下移动n行
Ctrl + f ,屏幕向下移动一页;Ctrl + b,屏幕向上移动一页;Ctrl + d,屏幕向下移动半页;Ctrl + u,屏幕向上移动半页
6、查找和替换
/+字符串,向下查找字符串;?+字符串,向上查找字符串。按下enter键显示查找出的全部字符串,然后,继续按下n,光标移动到下一个查找到的符合项;按下N,光标移动到上一个查找到的符合项。
:n1,n2s/字符串1/字符串2/g,n1、n2为数字,表示在n1和n2行内,用字符串2替换字符串1
:n1,n2s/字符串1/字符串2/gc,在替换前提示用户确认
PS($,可以表示到最后一行)
7、删除、复制和粘贴
x,删除当前光标所在字符;X,删除当前光标字符的前面一个字符;nx,n代表数字,连续删除包括当前光标在内所在字符的后面连续n个字符
dd,删除当前光标所在的一行;ndd,删除包括当前光标所在行的后边连续n行;d1G,当前光标所在行到第一行的所有内容;dG,删除当前光标到最后一行的所有内容;d0,删除当前光标所在字符到该行的第一个字符的内容(不包含光标所在字符);d$,删除当前光标所在字符到该行最后一个字符的内容(包含光标所在字符)
yy,删除当前光标所在的一行;nyy,删除包括当前光标所在行的后边连续n行;y1G,当前光标所在行到第一行的所有内容;yG,删除当前光标到最后一行的所有内容;y0,删除当前光标所在字符到该行的第一个字符的内容(不包含光标所在字符);y$,删除当前光标所在字符到该行最后一个字符的内容(包含光标所在字符)
p,将复制的数据粘贴到光标所在的下一行;P,将复制的数据粘贴到光标所在的上一行
8、撤销与恢复
u,撤销上一次操作
Ctrl+r,恢复上一次操作
9、其他
:set nu 显示行号
:set nonu 取消显示行号