vi文本编辑器分为三种模式:一般模式、编辑模式、指令列命令模式
在三种模式中可以从一般模式转到编辑模式,一般模式转到指令列命令模式,但是编辑模式与指令列模式却不能相互转化,在一般模式下,可以按下[i、I、a、A、o、O、r、R]中任意一个字母进入编辑模式,退出编辑模式按Esc键,从一般模式进入指令列模式,只需按下[:、/、?]任意一个就可以进去到指令列模式。文件编辑好后,在一般模式下按:wq进行归档,如果权限不够是,需要强制写入,命令为:wq!(前提是权限可改变)。
第一部分:一般模式下可用的按钮说明
h或者向左箭头← 光标向左移动一格
j或者向下箭头↓ 光标向下移动一格
k或者向上箭头↑ 光标向上移动一格
l或者向右箭头→ 光标向右移动一格
如果想进行多次移动的话,例如向下移动20格,可以用20j或者20↓ 组合键来实现
Ctrl +f 屏幕向下移动一页,相当于 Page Down
Ctrl +b 屏幕向上移动一页,相当于Page Up
Ctrl +d 屏幕向下移动半页
Ctrl +u 屏幕向上移动半页
+ 光标移动到非空格的下一列
- 光标移动到非空格的上一列
n<space> n是数字,例如输入20,再按下space键,光标就会向后面移动20个字符距离
0或者功能键[Home] 光标移动到这一行的最前面字符处
$或者功能键[End] 光标移动到这一行的最后面字符处
H 光标移到到这个屏幕的最上面那一行的第一个字符
M 光标移动到这个屏幕的中间的那一行的第一个字符
L 光标移动到这个屏幕的最下面的那一行的第一个字符
G 移动到这个档案的最后一行
nG 移动到这个档案的第n行
gg移动到这个档案的第一行,相当于1G
n<Enter> 光标向下移动n行
搜寻与取代
/word 向光标下寻找一个名为word的字符串
?word 向光标之上寻找一个名为word的字符串
n 是一个英文按键,表示重复上一步搜寻的动作,例:我们刚刚执行了/bird,按下n时它会继续往下搜寻bird这个字符串
N 是一个英文按键,与n相反,反向继续进行上一个搜寻动作
:n1,n2s/word1/word2/g n1与n2为数字,表示在n1至n2行之间搜寻字符串word1!并将word1替换成word2
:1,$s/word1/word2/g 从第一行到最后一行搜寻word1,并将word1替换成word2!
:1,$s/word1/word2/gc 从第一行在最后一行搜寻word1,并将word1替换成word2!并在替换之前提示用户是否确认(confirm)替换!
删除、复制与贴上
x,X 在一行中,x为向后删除一个字符,相当于del,X为向前删除一个字符,相当于Backspace即退格键
nx n为数字,表示连续向后删除n个字符
dd 删除游标所在的一整列
ndd n为数字,表示删除光标所在的向下n列
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除光标所在处到这一行的最后一个字符
d0 那个是数字0,表示删除光标所在处到这一行的第一个字符
yy 复制游标所在的那一行
nyy n为数字,表示复制光标所在处向下的n列
y1G 复制光标所在列到第一列的所有列
yG 复制光标所在列到最后一列的所有列
y0 复制光标所在的那个字符到这一行行首的所有字符
y$ 复制光标所在的那个字符到这一行最后一个字符的所有字符
p,P p为将已复制的数据在游标下一行贴上,P则为将已复制的数据在游标的上一行贴上
j 将光标所在的一行与下一行合并成一行
c 重复删除多个数据,例如向下删除10行,10cj
u 复原前一个动作
Ctrl + r 重做上一个动作
. 小数点,重复前一个动作
第二部分 一般模式切换的编辑模式可用的按键说明
i,I 进入insert,i为从光标所在处插入,I为从目前所在行的第一个非空格符处插入
a,A 进入insert,a为从光标所在处的下一个字符开始插入,A为光标所在行的最后一个字符处开始插入
o,O 进入insert,o从光标的下一行插入新的一行,O从光标的上一行插入新的一行
r,R 进入replace,r只会替换光标所在字符一次,R会一直替换光标所在处的字符,知道按Esc键
Esc键退出编辑模式
第三部分 一般模式进入指令模式可用的按键说明
:w 将编辑的数据写入到硬盘档案中
:w! 当文档的权限为只读时,强制写入,不过能不能写入,还得看这个文档的权限是否可改变
:q 离开vi
:q! 若改过该档案,又不想保存,可以这样强制离开该档案(感叹号!在vi中,常有强制的意思)
:wq 存储后离开,:wq!强制存储后离开
ZZ 若档案没有被改过,则不存储离开,若档案改过,则存储后离开
:w [filename] 将编辑的数据存储到另一个档案
:r [filename] 在编辑档案时,将另一个文档的数据读入
:n1,n2 w [filename] 将n1到n2行的数据存储到filename这个档案中
:! command 暂时离开vi到指令列模式下执行command的显示结果!例如:! ls/home 即可在vi当中察看/home底下以ls输出的档案信息
:set nu 显示行号
:set nonu 与set nu 相反,为取消行号