(*长期更新)软考网络工程师学习笔记——Linux操作系统中的vi/vim 编辑器详解

一、vi/vim概念

(一)vi/vim文本编辑器

vi(Visual interface)的是Linux、Unix等平台中使用非常普遍的屏幕编辑器,也就是一个文本编辑器,而vim是一个类似于vi经过改进和增加特性的文本编辑器,它的优点是功能强大、高度可定制等等。
可以在Linux终端直接输入vi或vim查看版本信息,如下:
在这里插入图片描述
简单来说,其实vi/vim就类似于window里面的文本编辑器,但它没有类似于window里面的菜单栏(也就相当于图形化页面),它只有命令,且命令繁多。

(二)gedit文本编辑器

常与vi编辑器提到的还有gedit文本编辑器,这里只是了解一下,它是由GTK+语言编写,用来当成是一个集成开发环境 (IDE),会根据不同的语言高亮显现关键字和标识符,命令如下:

[yyx@localhost ~]$ gedit

在Linux终端输入命令,即可进入文本编辑器:
在这里插入图片描述
也可以通过应用程序——附件——文本编辑器进入:
在这里插入图片描述

二、vi编辑器分类

vi编辑器
屏幕编辑器
行编辑器
命令模式
输入模式

vi编辑器分为屏幕编辑器行编辑器两种工作模式,它们是同一程序的不同入口,但这两个工作模式是可以互相切换的。

另外在屏幕编辑器vi它又主要分为两种模式,其中各种模式的进入和退出方法如下表:

名称进入方法退出方法
命令模式一开始使用该命令即进入该模式输入:wq,即可保存并退出
输入模式在命令模式下按下i通过ESC键,退出至命令模式

三、屏幕编辑器

vi/vim 命令用于编辑文件或新建文件后跟文件名称即可打开或新建文件,命令格式如下:

vi filename

(一)命令模式

1、进入命令模式

直接通过vi命令加上文件名,即可编辑或新建文件,此时进入的是命令模式,例如在/tmp目录下新建一个空白文件myfile,如下命令:

yyx@192 ~]$ su root
...
[root@192 yyx]# vi /tmp/myfile

在Linux终端中输入命令:
在这里插入图片描述
按下Enter键,可以看到这个文件里面每行都是”~“,即这是一个空白的文件,最后一行是该文件的名称:
在这里插入图片描述
在命令模式下,可以通过按下以下键进行一些操作,例如可以通过↑、↓、←、→方向键或h、j、k、l(h向左、j向下,k向上、l向右)来进行光标的移动(而在输入模式下无法使用h、j、k、l,即它会输入字母),如下表:

名称含义
Backspace光标移至当前的前一个字符(等同方向键左、h键) ,即向左移动,【注意由于是在命令模式下它并不会删除字符】
Space光标移至当前的后一个字符,即向右移动(等同方向键左、l键)
Delete删除光标当前的一个字符
Enter换行
$光标从当前位置移至本行行首
^光标从当前位置移至本行行尾
+光标下移一行
-光标上移一行

2、命令模式下的常用操作

(1)设置行号
若想对文档内容(每行)进行编号,可以通过输入set number,如下:

:set number

在vi编辑器的命令模式下输入,可看到每行内容进行了编号:
在这里插入图片描述
(2)回到首行、尾行和目标行
在命令模式下,直接按下gg1G可以将光标返回文档的首行(注意这里并不是在":"后输入命令,而是直接按下键盘上的相应字母和数字),如下通过vi命令编辑man_db.conf文件,:

[yyx@yyx12 ~]$ su root
...
[root@yyx12 yyx]# vi /etc/nsswitch.conf

打开文件后输入:set number进行编号:
在这里插入图片描述
然后我们将光标移动至最后一行:
在这里插入图片描述
①此时按下键盘上的gg1G可回到文档的首行,如下按下后光标立即跳至首行:
在这里插入图片描述
②按下GG,光标回到最后一行,如下按下后光标位于最后一行:
在这里插入图片描述
③若想将光标移动至目标行数的相应字节数,将光标移动至X行的第Y字节数,可以首先按下XG,然后按下Y→(→为右箭头),即可跳转至X行,且向右移动Y个字节数。
例如,当前光标位于首行,将光标移动至20行的第12个字节处,即首先按下20G,然后按下12→,如下:
在这里插入图片描述
(3)从光标下行开始搜索相应的字符串或字符,即直接在:之后输入相应的内容,例如搜索and字符:
在这里插入图片描述
若未搜索到相应内容,会有提示如下:
在这里插入图片描述
(4)一次性将多个字符/字符串替换为相应字符/字符串,如下将50行至100行的字符串“and”都替换为“And”:
在这里插入图片描述
然后找到相应的目标位置,可以按y一直继续替换:
在这里插入图片描述
替换完后,下面会显示一个替换的次数:
在这里插入图片描述
此时,若想回到上一次替换,可以按u进行返回一次替换,一直按可返回至替换前的字符/字符串(全部复原),如下:
在这里插入图片描述
(5)复制相应区间行的内容,并粘贴至相应行,例如复制51-60行的内容至最后一行,由于51-60共十行,先在键盘上按下51G,此时光标跳至51行:
在这里插入图片描述
然后再10yy复制十行内容,下面会出现10 lines yanked,如下:
在这里插入图片描述
此时按下GG到最后一行,再按下p即可粘贴:
在这里插入图片描述
(6)删除指定行和区间行的内容
①若想删除指定行的相应长度的字符,例如跳转至第 29 行,并且删除 15 个字符,按下29G,15x,即去到第 29 行,并且删除 15 个字符:
在这里插入图片描述
删除相应区间行的内容,也是首先按下要删除相应的区间行的开始行,按下→方向键,然后按下Xdd(dd前面的X代表从开始行往下的数字),例如删除 11 到 30 行之间的 20 行,即11G→20dd,就能删除相应的区间行:
在这里插入图片描述

3、退出命令模式

此时我们可以切换至其它的模式或者退出编辑,可以通过输入:wq保存并退出(注意这里的:是英文的),若要直接强制保存退出可以通过输入 :wq!,另外若对文件进行了修改但又不想保存可输入:q!,如下命令:

:wq

在Linux终端中输入命令,这里不用管位置直接键盘输入即出现在最后一行:
在这里插入图片描述
按下Enter键,即可退出文档,并返回到了终端:
在这里插入图片描述

(二)输入模式

1、进入输入模式

由于命令模式无法对文件进行编辑,所以我们在命令模式中通过按下键盘上的i键(insert:插入)【也可以通过别的键,下面会有介绍】,即可切换至输入模式,按下后可以在页面的最后一行看到--INSERT--的标黑粗体显示,如下:

i

首先通过vi命令打开/新建文件:
在这里插入图片描述
按下 i 键,可以看到下方的- -INSERT- -,此时代表的是当前模式为输入模式
在这里插入图片描述
通过在命令模式下按下以下键都能进入文本输入模式:

名称含义
i在光标前插入文本
I在光标所在行首插入文本
a在光标后插入文本
A在光标所在行尾插入文本
o在光标所在行的下面新加一行
O在光标所在行的上面新加一行
Esc返回命令模式

例如当我们进入命令模式,按下i键,此时光标处于光标前:
在这里插入图片描述
我们再通过Esc键退回至命令模式,这次按下O键,此时可看到光标位于光标所在行的行尾:
在这里插入图片描述
再次通过Esc键退回至命令模式,按下A键,此时可看到光标位于新建的上一行的新行处:
在这里插入图片描述

2、编辑文档

1、单个文档编辑
对文档进行编辑,可以通过Enter键换行、Backspace键删除光标前的一个字符、Del键删除光标当前的字符、方向键上下左右移动光标等等:
在这里插入图片描述
在编辑文档时,可以通过按下以下键进行一些操作,例如可以通过上、下、左、右方向键(而h、j、k、l在输入模式下无法使用,即它会输入字母),如下表:

名称含义
Backspace删除光标前的一个字符
Space在光标前添加一个空格
Delete删除光标当前的一个字符
Enter换行

2、多个文档编辑
例如我们想对多个文件进行编辑,可以在vi命令后加上参数-o/-O,并跟上多个文件名称,如下:

vi -o 文件名称1 文件名称2 ...

例如,下面对两个名称为t1和t2的文档进行编辑:
在这里插入图片描述
这里相当于对当前屏幕分为两个页面进行编辑文件,但是这两个文件是独立的,默认进入是第一个文件(即文件名称为1的文件),此时光标位于第一个文件的第一行行首:
在这里插入图片描述
若想切换文件,可通过ctrl+ww切换,如下切换至t2文件,按下ctrl+ww,切换后可见此时光标位于第二个文件t2的第一行行首:
在这里插入图片描述
例如我们对两个文件编辑后,现在要执行t1文件的第一行内容复制粘贴到t2的第二行,可以进行以下操作:在t1文件中,光标处于首位时按yy,复制当前行,ctrl+ww切换至t2,然后光标移动至第一行末尾,然后按下p,即可复制至t2的第二行:
在这里插入图片描述
此时通过:wq保存并退出,首先退出的是t1文件,然后再是t2文件:
在这里插入图片描述

3、退出编辑文档

当我们对文档的内容编辑好后,想退出时,此时可以通过按下ESC键退出至命令模式,如下,可看到下方的- -INSERT- -已消失,此时的模式为命令模式:
在这里插入图片描述
然后我们想保存并退出该文件,可以通过:wq退出:
在这里插入图片描述
此时我们再通过cat命令查看该文件,如下:

[root@192 yyx]# cat /tmp/myfile

在终端中输入命令,可看到就是刚刚编辑文件的内容:
在这里插入图片描述
这里就完成了新建文件——编辑文件——保存文件——查看文件的步骤。

四、行编辑器

行编辑器与屏幕编辑器最大的区别是,屏幕编辑器是对每一个字符进行编辑的,而行编辑器每一条编辑命令所针对的编辑单位是行,即一进行编辑。

有的地方将行编辑器也称作底线命令模式,由于两种工作模式是可以切换的,所以常将命令模式、输入模式和底线命令模式一起归纳,如下表是这三种模式的进入和退出方法:

名称进入方法退出方法
命令模式一开始使用该命令即进入该模式输入:wq,即可保存并退出
输入模式在命令模式下按下i通过ESC键,退出至命令模式
底线命令模式在命令模式下按下::vi命令回车Enter键结束通过,退出至命令模式

(一)进入行编辑器

1、通过屏幕编辑器进入

由于行编辑器和屏幕编辑器是可以切换的,所以在vi屏幕编辑器的命令模式下通过输入:即可进入行编辑器,如下可看到我们可在“:”后输入字母、数字、符号等等:
在这里插入图片描述

2、从终端进入

另外也可以通过ex后跟文件名称的方式来进入行编辑器,如下:

ex filename

例如通过ex行编下编辑位于/tmp目录下的myfile文件:

[yyx@192 ~]$ ex /tmp/myfile

在Linux终端输入命令,进入行编:
在这里插入图片描述

(二)退出行编辑器

1、退回至屏幕编辑器

在行编辑器下,即在:后面输入vi即可返回至屏幕编辑器的命令模式,如下:
在这里插入图片描述
然后回车即可返回命令模式,光标停留在行编处理的最后一行的下一行的行首:
在这里插入图片描述

2、退出vi编辑器

(1)通过在:后面输入wq,即可写回(覆盖)原文件,并退出vi编辑器;
(2)在:后面输入q,退出vi编辑器;
(3)在:后面输入q!,强行退出vi编辑器(不写文件);

(三)行编的常用命令

1、:n,表示将第n行作为当前编辑行,例如目前当前行是第一行:,
通过在:后跟2,即代表将第2行作为当前编辑行,输入:2,回车:
在这里插入图片描述
可见当前编辑行光标已移动至第二行行首:
在这里插入图片描述
2、:np,表示显示第n行的内容,并将第n行作为当前行,例如:
在这里插入图片描述
可见第二行的内容显示在下方,且当前光标已切换至第二行行首:
在这里插入图片描述
3、:m,np,表示显示第m行至第n行的内容,并将第n行作为当前行,例如:
在这里插入图片描述
显示第二行至第四行的内容,并将第四行作为当前光标所在行:
在这里插入图片描述
光标位于第四行:
在这里插入图片描述
4、删除操作
(1):d,表示删除当前行的内容
(2):nd,表示删除第n行的内容,删除后将当前的第n行作为当前光标所在行;
(3):m,nd,表示删除第m行至第n行的内容,删除后将当前的第n行作为当前光标所在行;
5、:a,表示在当前行的下一行输入文本,直到按Esc键为止。
6、替换操作
(1):s/string1/string2/,表示将当前行的第一个字符串string1替换成字符串string2;
(2):m,ns/string1/string2/g,表示把从第m行到第n行中所有字符串string1都替换成字符串string2。
7、(1):r filename,在当前行的后面附加文件名称为filename的文件内容;
(2):nr filename,在第n行的后面附加文件名称为filename的文件内容。
8、(1):w filename,写到文件名称为filename,不退出;
(2):w!filename,强制执行写到文件名称为filename,不退出。

五、vi命令的其他常用选项

(一)恢复上次的编辑副本

vi -r filename

vi后跟-r参数可以对修改过但因意外中断而未保存的文件名称为filename的文件读入编辑缓冲区,使编辑工作继续进行。

(二)设置加密文件

vi -x filename

vi后跟-x参数可对文件名称为filename的加密文件经过输入密码后进行编辑。
例如现在对一个没加密的文件设置密码并编辑该文件,如下命令:

[yyx@192 ~]$ vi -x /tmp/myfile

在Linux终端输入命令:
在这里插入图片描述
这里会提示再输入一次密码:
在这里插入图片描述
设置好密码后,进入vi编辑器然后保存,再次编辑该文件时就要使用密码才能进入:
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风(●•σ )

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值