Linux配置文件都是以ASCII的纯文本形式存在。
为什么学习vi
1)UnixLike系统都会内置vi文本编辑器,其他的文本编辑器则不一定存在
2)许多软件的编辑接口都会主动调用vi
3)vi具有程序编辑的能力,可以主动以字体颜色辨别语法的正确性
4)程序简单,编辑速度相当快
什么是vim
vim是vi的高级版本,vim可以以颜色或底线等方式来显示一些特殊的信息。
vim可以依据文件的扩展名或者文件内的开头信息判断该文件的内容,从而自动调用
改程序的语法判断。再以颜色来显示程序和一般信息。也就是说vim是个程序编辑器。
vim里面提供了很多额外的功能,例如
1.支持正则表达式的查找框架
2.多文件编辑
3.块复制
vi的使用
1.一般模式
直接使用vi打开文件,就是一般模式。
可以使用上下左右按键来移动光标
可以删除字符和整行
可以复制黏贴数据
无法编辑
2.编辑模式
i I a A o O r R按键之后可以进入编辑模式。
这时候,界面左下角会出现INSERT或REPLACE的字样,此时才可以进行编辑。
通过Esc按键可以退出编辑模式,回到一般模式
3.命令行模式
在一般模式中,输入: / ?中的任意一个按钮,就可以将光标移动到最下面那一行。
可以用于
1)查找数据
2)读取
3)保存
4)大量替换字符
5)离开vi
6)显示行号
查看文件的默认权限
我们查看权限的时候
ubuntu@ubuntu:~$ pwd
/home/ubuntu
ubuntu@ubuntu:~$ umask
0002
ubuntu@ubuntu:~$
1)通过直接输入umask,就可以看到数字形态的权限设置分数。
0002:第一个数字是特殊权限用的,我们先不要理他
后面三个数字分别代表:user、group、other(其他组)
文件的默认权限:
若用户创建文件,那么默认没有执行权限,即只有rw 两个权限。最大值为666
所以本例子中的文件实际权限为664
若用户创建文件夹,那么,由于可不可以进入文件夹和x有关,所以默认值为777
所以本例子中的文件夹实际权限为775
umask分数就是指的是默认值需要剪掉的权限。
2)umask -S
直接以符号的形式显示出权限
ubuntu@ubuntu:~$ umask -S
u=rwx,g=rwx,o=rx
创建文件和文件夹权限确认
ubuntu@ubuntu:~$ touch test.txt
ubuntu@ubuntu:~$ ls -lh test.txt
-rw-rw-r-- 1 ubuntu ubuntu 0 Jan 23 18:48 test.txt
ubuntu@ubuntu:~$ mkdir test
ubuntu@ubuntu:~$ ls -l |grep test
drwxrwxr-x 2 ubuntu ubuntu 4096 Jan 23 18:49 test
-rw-rw-r-- 1 ubuntu ubuntu 0 Jan 23 18:48 test.txt
按键说明
1)移动光标
hjkl:左下上右
Ctrl+f:向下移一页
Ctrl+b: 向上移一页
Ctrl+d: 向下移半页
Ctrl+u:向上移半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n<space> 光标向右移动n个字符
0或home键:这一行的最前面字符(常用)
$或end键: 这一行的最后面字符(常用)
H:最上方的那一行的第一个字符
M:中间的那一行的第一个字符
L:光标移动到最下方那一行的第一个字符
G:移动到这个文件的最后一行(常用)
nG:移动到这个文件的第n行(常用)。
gg:移动到文件的第一行(常用)
N[Enter]:光标向下移动N行(常用)
2)在vi中按u可以撤销一次操作
u:撤销上一步的操作
Ctrl+r: 恢复上一步被撤销的操作
3)查找与替换(重点掌握)
/word:向下寻找一个名为word的字符串。
?word:向上寻找名为word的字符串。
n:重复上一个查找的动作
N:方向进行上一个查找动作
:n1,n2s/word1/word2/g(常用)
:1,$s/word1/word2/g(常用)
:1,$s/word1/word2/gc(常用)
y 确认执行这个替换
n 取消这个替换
a 执行所有替换且不再询问
q 退出且不做任何改动
l 替换完匹配点后退出
Ctrl + E 向上翻滚一行
Ctrl+ Y 向上翻滚一行
删除赋值黏贴
x 向后删除一个字符(常用)
X 向前删除一个字符 (常用)
nx先后删除n个字符
dd 删除光标所在行(常用)
ndd 光标所在的向下n行(常用)
d1G 删除光标所在行到第一行的所有数据(常用)
dG 删除光标所在行到最后一行的所有数据(常用)
d$ 删除光标所在处到该行的最后一个字符
d0 删除光标所在处到该行的最前面的一个字符
yy 复制光标所在的那一行(常用)
nyy 复制光标所在的向下n行(常用)
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在行到最后一行的所有数据
y0 复制光标所在处的字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行捍行尾所有数据
p 将已复制的数据在光标下一行粘贴
P 将已复制的数据在光标的上一行粘贴
移动光标的方法
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,向下删除10行【10cj】
一般模式切换到编辑模式可用按钮说明
i I
进入插入模式,i为从目前光标所在处插入;
I为目前所在行的第一个非空格符处开始插入(常用)
a A
进入插入模式,a为从目前光标所在的下一个字符处开始插入;
A为从光标所在行的最后一个字符处开始插入(常用)
o O
进入插入模式,o为在目前光标所在的下一行处插入新的一行;
O为在目前光标所在出的上一行出入新的一行(常用)
r R
进入替换模式, r只会替换光标所在的那一个字符一次;
R会一直替换光标所在的文字,直到按下【Esc】为止。(常用)
一般模式切换到命令行模式
:w 将编辑的数据写入磁盘文件中(常用)
:w! 若文件属性为“只读”时,强制写入该文件。不过,到底能不能
写入和你对该文件的文件权限相关
:q 离开vi(常用)
:q! 若曾修改过文件,又不想存储,使用“!”,为强制离开不保存
!在vi中经常带有“强制”意思
:wq 保存后离开,若为wq!强制保存后离开
ZZ 文件没有改动,则不保存离开,若文件已经被更改,则保存后离开
:w [filename] 将编辑的数据保存为另一个文件(类似另存文件的意思)
:r [filename] 在编辑的数据中,读入另外一个文件的数据,
即将filename这个文件内容加到光标所在行后面
:n1,n2 w [filename] 将n1到n2的内容保存成filename这个文件
:! command 暂时离开vi到命令行模式下执行command的显示结果。
vim环境的更改
:set nu 显示行号,设置之后,会在每一行的前缀显示该行的行号
:set nonu 取消行号
特别注意 vi中,数字是很有意义的,数字通常代表重复做几次的意思。也有可能是代表去到
第几个什么什么的意思。
50dd: 删除50行
50j: 向下移动50行