一、vi的使用
1、vi分为三种模式
一般模式:默认进入的。可以上下左右键移动光标,删除字符/删除整行,复制粘贴
编辑模式:按下[i,I,o,O,a,A,r,R]进入编辑模式,当按下这些按键时,会出现INSERT字样。按[Esc]可退出编辑模式,回到一般模式。
命令行模式:输入[:或/或?]中的任何一个,就可以进入命令行模式,可以在最底下一行输入命令。同样按ESC退出命令行模式,回到一般模式。
注意:只有一般模式可以与编辑模式、命令行模式切换,编辑模式与命令行模式之间不可以切换。
2、如何用vi简单的编辑一个文件:
(1)[root@server1 ~]# vi test.txt ##vi 文件名 进入vi的一般模式,文件存在则打开,不存在则创建,但是创建的文件只有在命令输入wq保存退出后才会真正的保存,否则这个文件是不会存在的
进入vi编辑器后,上半部分显示的是文件的内容,最底下一行显示的是文件的信息。
这表示vi打开的文件名为test.txt,是一个新文件。
(2)按下i进入编辑模式
左下角出现-- INSERT --字样,表示现在可以进行编辑
(3)编辑完成后,按ESC回到一般模式
(4)按 : 进入命令行模式
(5)输入wq,即可保存退出编辑文件
注意:当保存退出时,如果提示不能保存退出,可以使用 wq! 强制保存退出。
(6)可以使用ls -l 查看test文件已被建立,且属性如下:
[root@server1 ~]# ls -l test.txt
-rw-r--r-- 1 root root 125 Aug 15 21:49 test.txt
(7)可以使用cat命令查看文件的内容是否如编辑的一样:
二、按键功能(有:的是表示要在命令行模式中输入的命令)
1、一般模式
移动光标
h/<-- 键 光标向左移动一个字符
j/向下箭头键 光标向下移动一个字符
k/向上箭头键 光标向上移动一个字符
l/向右箭头键 光标向右移动一个字符
如果想要多次移动的话,如移动n行,可以使用nj组合按键。
ctrl + f 屏幕向下移动一页,=PgDn按键
ctrl + b 屏幕向上移动一页,=PgUp按键
ctrl + d 屏幕向下移动半页
ctrl + u 屏幕向上移动半页
+ 光标移动到非空格符的下一列
- 光标移动到非空各符的上一列
n<space> 光标向右移动这一行的n个字符。如20<space>
0/Home键 移动到这一行首
$/End键 移动到这一行尾
H 光标移动到这个屏幕的第一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个文件的最后一行
nG 移动到这个文件的第n行,如20G,移动到第20行
gg 移动到这个文件的第一行
n<Enter> 光标向下移动n行
搜寻与取代
/word 在文件中向下寻找一个名称尾word的字符串,如/root
?word 在文件中向上寻找一个名为word字符串
n 重复前一个搜寻的动作
N 反向进行一个搜索动作,如?root之后,按下N则表示向下寻找关键字
:n1,n2s/word1/word2/g 在第n1行和第n2行之间寻找word1这个字符串,并将其改为word2,例如在100到200行之间将root改为server:100,200s/root/server/g
:1,$s/word1/word2/g 从第一行到最后一行寻找word1字符串,并将其改为word2
:1,$s/word1/word2/gc 从第一行到最后一行寻找word1字符串,并将其改为 word2,且在更改前会询问用户是否确认更改
删除、复制、粘贴
x,X 在一行中,x向后删除一个字符,X向前删除一个字符
nx 连续向后删除n个字符,例如:10x,向后删除10个字符
dd 删除光标所在的一整行
ndd 删除光标所在的向下n行
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除光标到该行的最后一个字符
d0 删除光标所在到该行的行首
yy 复制光标所在那一行
nyy 复制光标所在向下n行
y1G 复制光标所在列到第一列的所有数据
yG 复制光标所在列到最后一列的所有数据
y0 复制光标所在的字符到该行行首的所有数据
y$ 复制光标所在的字符到该行行尾的所有数据
p,P p在光标所在下一行粘贴,即如果光标在第10行,则从第11 行开始粘贴
P在光标所在上一行粘贴,即如果光标在第10行,则从第9 行开始粘贴,原来的第10行会在粘贴的内容后面
J 将光标所在列与下一列的数据合成一列
c 重复删除多个数据,例如:向下删除10行:10cj
u 复原前一个动作,例如撤销删除
ctrl + r 重做上一个动作
. 小数点,重复前一个动作,如重复删除,粘贴等
2、进入编辑模式
i,I i: 从光标所在出插入
I: 从光标所在行的第一个非空个符出插入
a,A a:从光标所在的下一个字付处开始插入
A:从光标所在行的最后一个字符插入
o,O o:在光标所在的下一行插入
O:在光标所在的上一行插入
r,R r只会取代光标所在的那个字符一次
R:一直取代光标所在的字符,直到按下ESC键
3、命令行模式
:w 将编辑的数据写入硬盘文件中
:w! 当文件属性尾只读时,强制写入文件。到底能不能写入,最终取决于用户对该 文进的文件权限
:q 退出vi
:q! 若修改过文件,但是不想保存,可使用强制退出
:wq 保存退出。wq!为强制保存退出
ZZ 若文件没有被修改,则不保存退出;若文件被修改,则保存退出
:w [文件名] 将编辑的数据保存为另一个文件
:r [文件名] 在编辑的数据中,读如林和一个文件的数据
:n1,n2 w [filename] 将n1到n2的内容保存到filename这个文件中
:! command 暂时离开vi到指令列模式下执行command的显示结果。例如::!ls /home即可在vi中查看/home底下ls命令输出的文件信息
vim环境的设置
:set nu 显示行号
:n 数字n,跳到指定的第n行
:set nonu 取消行号
3、练习
(1)请在 /tmp 这个目录下建立一个名为 vitest 的目录;
[root@server1 ~]# cd /tmp/
[root@server1 tmp]# mkdir vitest
[root@server1 tmp]# ls -d vitest/
vitest/
(2)进入 vitest 这个目录当中;
[root@server1 tmp]# cd vitest/
[root@server1 vitest]# ls
[root@server1 vitest]#
(3)将 /etc/man.config 复制到本目录底下;
[root@server1 vitest]# cp /etc/ma ##按两下tab键可以查看ma开头的有哪些文件
magic mailcap makedev.d/ man.config
[root@server1 vitest]# cp /etc/ma
magic mailcap makedev.d/ man.config
[root@server1 vitest]# cp /etc/man.config . ##cp复制文件到当前目录,.表示当前目录
[root@server1 vitest]# ls
man.config
[root@server1 vitest]#
(4)使用 vi 打开本目录下的 man.config 这个档案;
[root@server1 vitest]# vi man.config
(5)在 vi 中设定一下行号;
:set nu
(6)移动到第 58 行,向右移动40 个字符,请问你看到的双引号内是什么目录?
58G ##移动到58行
40l ##向右移动40个字符
目录为:/dir/bin/foo
(7)移动到第一行,并且向下搜寻一下『 bzip2 』这个字符串,请问他在第几行?
gg/1G ##移动到第一行
/bzip2 ##搜寻字符串bzip2
在第137行
(8)接着下来,我要将 50 到 100 行之间的『小写 man 字符串』改为『大写 MAN 字符串』,并且一个一个挑选是否需要修改,如何下达指令?如果在挑选过程中一直按『y』, 结果会在最后一行出现改变了几个 man 呢?
:50,100s/man/MAN/gc
按一次y会更改一处
若一直按y,最后会显示在52行内,置换63个man
(9)修改完之后,突然反悔了,要全部复原,有哪些方法?
a、一直按u还原
b、:q!强制不保存退出,在重新读取文件内容
(10)我要复制 65 到 73 这九行的内容(含有 MANPATH_MAP),并且贴到最后一行之后;
:65 ##将光标移动到第65行
9yy ##向下复制9行
G ##移动到文件的最后一行
p ##向下粘贴
(11)21 到 42 行之间的开头为 # 符号的批注数据我不要了,要如何删除?
42-21+1=22行
22dd
会发现原来的43行变成了现在的21行
(12)将这个档案另存成一个 man.test.config 文件名;
:w man.test.config
(13)去到第 27 行,并且删除 15 个字符,结果出现的第一个单词是什么?
:27
15x
结果出现的第一个单词是you
(14)在第一行新增一行,该行内容输入『I am a student...』;
gg/1G
O(大写的O) ##向上插入一行
(15)储存后离开吧!
:wq