vi的基本使用

我是Longer · 收录于 2023-12-06 19:38:02 · source URL

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 取消显示行号