Linux学习 - vi/vim编辑器
在Linux的系统中使用文本编辑器来编辑Linux参数配置文件,是一件非常重要的事情。
在Linux的世界中,绝大多数的配置文件都是以ASCII的纯文本文件形式存在,因此利用简单的文字编辑软件就能修改设置。
ubuntu 安装vim
Linux默认自带vi,一般使用升级版vim。第一次使用需要安装vim
sudo apt install vim
vi/vim的重要性
- 所有的UNIX-like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在
- 很多软件的编辑接口都会主动调用vi
- vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性,方便程序设计
- 程序简单,编辑速度快
我们可以简单地将vim视作vi的高级版本,vim可以用颜色或下划线的方式来显示一些特殊的信息。例如,使用vim去编辑一个C语言程序的文件,或是shell脚本程序时,vim会根据文件的扩展名或是文件内的开头信息,判断该文件的内容而自动调用该程序的语法判断样式,再以颜色来显示程序代码与一般信息
简而言之,vim是个程序编辑器,甚至一些Linux基础配置文件内的语法,都能够用vim来检查,vim是一个程序开发工具而不是文本处理软件。
vi的使用
基本上vi共分为3种模式,分别是一般命令模式 ,编辑模式 与命令行模式。
一般命令模式(command mode)
以vi打开一个文件就直接进入一般模式了(这是默认的模式,也简称为一般模式)。
编辑模式(insert mode)
在一般命令模式中可以进行删除,复制,粘贴等的操作,但是却无法编辑文件的内容。只有等你按下【i,l,o,O,a,A,r,R】等任何一个字母之后才会进入编辑模式。 需要注意的是,在Linux中,按下这些按键时,在界面的左下方会出现【INSERT】或【REPLACE】的字样,此时才可以进行编辑,而如果要回到一般命令模式时,则必须要按下【Esc】这个按键即可退出编辑模式。
命令行模式(command-line mode)
在一般模式当中,输入【: / ?】三个中的任何一个按钮,就可以将光标移动到最下面那一行。 在这个模式当中,可以提供你【查询数据】的操作,而读取,保存,批量替换字符,退出vi,显示行号等的操作则是在此模式中完成。
3种模式的关系
一般命令模式可与编辑模式及命令行模式切换,但编辑模式与命令行模式之间不可互相切换。
按键说明
vi的三种模式只有一般命令模式可以与编辑,命令行模式切换,编辑模式与命令行模式之间并不能切换。
第一部分:一般命令模式可用的功能按键说明,光标移动,复制粘贴,查找替换等
移动光标的方法:
按键 | 说明 |
---|---|
h或向左箭头键 | 光标向左移动一个字符 |
j或向下箭头键 | 光标向下移动一个字符 |
k或向上箭头键 | 光标向上移动一个字符 |
l或向右箭头键 | 光标向右移动一个字符 |
[Ctrl] + [f] | 屏幕【向下】移动一页,相当于[Page Down]按键(常用) |
[Ctrl] + [b] | 屏幕【向上】移动一页,相当于[Page Up]按键(常用) |
0或功能键[Home] | 这是数字【0】:移动到这一行的最前面字符处(常用) |
$或功能键[End] | 移动到这一行的最后面字符(常用) |
G | 移动到这个文件的最后一行(常用) |
gg | 移动到这个文件的第一行,相当于1G(常用) |
n< Enter > | n为数字,光标向下移动n行 |
查找与替换:
按键 | 说明 |
---|---|
/word | 向光标之下寻找一个名称为word的字符串(常用) |
:n1,n2s/word1/word2/g | n1与n2为数字,在第n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2(常用) |
:1,$s/word1/word2/g | 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2(常用) |
:1,$s/word1/word2/gc | 从第一行到最后一行寻找word1字符串,并将该字符串替换为word2,并且在替换前显示 提示字符给用户确认(confirm)是否需要替换(常用) |
删除,复制与粘贴:
按键 | 说明 |
---|---|
x与X | 在一行当中,x为向后删除一个字符(相当于[del]按键),X为向前删除一个字符(相当于 [Backspace]即退格键)(常用) |
dd | 删除(剪切)光标所在的那一整行(常用) |
ndd | n为数字,删除(剪切)光标所在的向下n行(常用) |
yy | 复制光标所在的那一行(常用) |
nyy | n为数字,复制光标所在的向下n行(常用) |
p与P | p为将已复制的数据在光标下一行粘贴,P则为贴在光标上一行(常用) |
u | 恢复前一个操作(常用) |
[Ctrl] + r | 重做上一个操作(常用) |
第二部分:一般命令模式切换到编辑模式可用的按键说明
进入插入或替换的编辑模式:
按键 | 说明 |
---|---|
i与l | 进入插入模式(Insert mode): i为【从目前光标所在处插入】,I为【在目前所在行的第一个非空格符处开始插入】(常用) |
a与A | 进入插入模式(Insert mode): a为【从目前光标所在的下一个字符处开始插入】,A为【从光标所在行的最后一个字符处开始插入】(常用) |
o与O | 进入插入模式(Insert mode): o为【在目前光标所在的下一行插入新的一行】;O为【在目前光标所在处的上一行插入新的一行】(常用) |
r与R | 进入替换模式(Replace mode): r只会替换光标所在的那一个字符一次;R会一直替换光标所在的文字,直到按下Esc为止(常用) |
[Esc] | 退出编辑模式,回到一般命令模式中(常用) |
第三部分:一般命令模式切换到命令行模式的可用按键说明
命令行模式的保存,退出等命令:
按键 | 说明 |
---|---|
:w | 将编辑的数据写入硬盘文件中(常用) |
:w! | 若文件属性为【只读】时,强制写入该文件 |
:q | 退出vi(常用) |
:q! | 若曾修改过文件,又不想保存,使用!为强制退出不保存 |
:wq | 保存后退出,若为:wq!则为强制保存后退出(常用) |
ZZ | 若文件没有修改,则不保存退出,若文件已经被修改过,则保存后退出 |
:w [filename] | 将编辑的数据保存成另一个文件(类似另存新文件) |
:r [filename] | 在编辑的数据中,读入另一个文件的数据,亦即将【filename】这个文件内容加到光标所在行后面 |
:n1,n2 w [filename] | 将n1到n2的内容保存为filename这个文件 |
:set nu | 显示行号,设置之后,会在每一行的前缀显示该行的行号 |
:set nonu | 与set nu相反,为取消行号 |