vi共有三种模式,“一般模式”、“编辑模式”、“指令列命令模式”
一般模式:
以vi处理一个文档,刚进入时就是一般模式,该模式下可以“删除字元”或“删除整行”可以复制,粘贴资料。但是无法编辑
编辑模式:
输入【i,I,o,O,a,A,r,R】等字母后进入到编辑模式。在页面下方出现‘insert或replace’才可以输入任何字来输入到档案中
指令列命令模式:
在一般模式中输入:/ ?可以提供读取、搜索、存档、退出vi、显示行号等操作
一般模式:光标移动
n<Enter>: n为数字,光标向下移动n行
n<space>:n为数字,光标右移n位
gg:移动到文档的第一行
0:移动到这一行的最前面
G:移动到档案的最后一行。
一般模式:搜索与取代
/word:开始向下搜索关键字word
?word:开始向上搜索关键字word
n:重复执行搜索命令
N:执行反向结果,若之前输入/word向下搜索,按N则向上搜索。
:n1,n2s/word1/word2 n1,n2为数字,在n1与n2行之间寻找word1字段,并用word2来取代。
:1, $s/word1/word2/gc 从第一行到最后一行寻找word1字串,并将该字串取代为word2!在取代前显示提示,是否取代。
一般模式:删除、复制、粘贴
x,X: x向后删除一个字符(del),X向前删除一个字符(backspace)
nx:n为数字,连续向后删除n个字符。
dd:删除光标所在的那一行
ndd:n为数字,删除n行
yy:复制光标所在那一行
nyy:复制n行
p,P: p在光标行下面粘贴,P在光标行上面粘贴
u:撤销上一步
[Ctrl]+r:重做上一个动作
u和[Ctrl]+r搭配使用可以完成一直撤销的操作
进入编辑模式:
i ,I:插入。i:在光标处进行插入操作。I光标移动到该行最前面出开始插入
a,A: a从目前光标处下一个字符开始插入,A所在行最后一个字符开始插入
o,O: o在光标下一行插入新的一行。O光标所在上一行插入新的一行。
r,R:取代 r会取代光标处的一个字符;R会一直取代光标所在文字,知道ESC
指令列命令模式
:w 将编辑的资料保存
:w! 强制保存。
:q 退出
:q! 强制退出
:wq 保存后退出
ZZ 若档案没有变更,则不保存离开,若档案已经变动,则保存后退出
:n1, n2 w [filename] 将n1到n2的内容存储成filename这个档案
:! command 暂时离开vi到指令模式下执行command的显示结果。
例如“:! ls /home”即离开vi后查看/home底下以ls输出的档案资讯。
:set nu :显示行号,设定后会在每一行的字首显示该行行号
:set nonu:取消行号。
vi简单练习题
1. 请在/tmp这个目录下建立一个名为vitest的目录;
2. 进入vitest这个目录当中;
3. 将/etc/man.config拷贝到本目录底下(或由上述的连结下载man.config档案);
4. 使用vi开启本目录下的man.config这个档案;
5. 在vi中设定一下行号;
6. 移动到第58行,向右移动40个字元,请问您看到的双引号内是什么目录?
7. 移动到第一行,并且向下搜寻一下『bzip2』这个字串,请问他在第几行?
8. 接著下来,我要将50到100行之间的man改为MAN,并且一个一个挑选是否需要修改,如何下达指令?
9. 修改完之后,突然反悔了,要全部复原,有哪些方法?
10. 我要复制51到60行这十行的内容,并且贴到最后一行之后;
11. 删除11到30行之间的20行;
12. 将这个档案另存成一个man.test.config的档名;
13. 去到第29行,并且删除15个字元;
14. 储存后离开吧!
整个步骤可以如下显示∶
1. 『mkdir /tmp/vitest』
2. 『cd /tmp/vitest』
3. 『cp /etc/man.config .』
4. 『vi man.config