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

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

一、vi/vim概念


(一)vi/vim文本编辑器


vi(Visual interface)的是Linux、Unix等平台中使用非常普遍的屏幕编辑器,也就是一个文本编辑器,而vim是一个类似于vi经过改进和增加特性的文本编辑器,它的优点是功能强大、高度可定制等等。

可以在Linux终端直接输入vi或vim查看版本信息,如下:

1667190714197.jpg

简单来说,其实vi/vim就类似于window里面的文本编辑器,但它没有类似于window里面的菜单栏(也就相当于图形化页面),它只有命令,且命令繁多。


(二)gedit文本编辑器


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

[yyx@localhost ~]$ gedit

在Linux终端输入命令,即可进入文本编辑器:

1667190748978.jpg

也可以通过应用程序——附件——文本编辑器进入:

1667190760338.jpg


二、vi编辑器分类

image.png


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


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

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


三、屏幕编辑器


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

vi filename


(一)命令模式


1、进入命令模式


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

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


在Linux终端中输入命令:

1667190847478.jpg

按下Enter键,可以看到这个文件里面每行都是”~“,即这是一个空白的文件,最后一行是该文件的名称:

1667190860959.jpg

在命令模式下,可以通过按下以下键进行一些操作,例如可以通过↑、↓、←、→方向键或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编辑器的命令模式下输入,可看到每行内容进行了编号:

1667190938788.jpg

(2)回到首行、尾行和目标行

在命令模式下,直接按下gg或1G可以将光标返回文档的首行(注意这里并不是在":"后输入命令,而是直接按下键盘上的相应字母和数字),如下通过vi命令编辑man_db.conf文件,:

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


打开文件后输入:set number进行编号:

1667190955282.jpg

然后我们将光标移动至最后一行:

1667190974516.jpg

①此时按下键盘上的gg或1G可回到文档的首行,如下按下后光标立即跳至首行:

1667190985717.jpg

②按下GG,光标回到最后一行,如下按下后光标位于最后一行:

1667190996704.jpg

③若想将光标移动至目标行数的相应字节数,将光标移动至X行的第Y字节数,可以首先按下XG,然后按下Y→(→为右箭头),即可跳转至X行,且向右移动Y个字节数。

例如,当前光标位于首行,将光标移动至20行的第12个字节处,即首先按下20G,然后按下12→,如下:

1667191012928.jpg

(3)从光标下行开始搜索相应的字符串或字符,即直接在:之后输入相应的内容,例如搜索and字符:

1667191025181.jpg

若未搜索到相应内容,会有提示如下:

1667191035976.jpg

(4)一次性将多个字符/字符串替换为相应字符/字符串,如下将50行至100行的字符串“and”都替换为“And”:

1667191051140.jpg

然后找到相应的目标位置,可以按y一直继续替换:

1667191062810.jpg

替换完后,下面会显示一个替换的次数:

1667191077040.jpg

此时,若想回到上一次替换,可以按u进行返回一次替换,一直按可返回至替换前的字符/字符串(全部复原),如下:

1667191086279.jpg

(5)复制相应区间行的内容,并粘贴至相应行,例如复制51-60行的内容至最后一行,由于51-60共十行,先在键盘上按下51G,此时光标跳至51行:

1667191101320.jpg

然后再10yy复制十行内容,下面会出现10 lines yanked,如下:

1667191110072.jpg

此时按下GG到最后一行,再按下p即可粘贴:

1667191123763.jpg

(6)删除指定行和区间行的内容

①若想删除指定行的相应长度的字符,例如跳转至第 29 行,并且删除 15 个字符,按下29G,15x,即去到第 29 行,并且删除 15 个字符:

1667191139990.jpg

②删除相应区间行的内容,也是首先按下要删除相应的区间行的开始行,按下→方向键,然后按下Xdd(dd前面的X代表从开始行往下的数字),例如删除 11 到 30 行之间的 20 行,即11G→20dd,就能删除相应的区间行:

1667191154835.jpg


3、退出命令模式


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

:wq


在Linux终端中输入命令,这里不用管位置直接键盘输入即出现在最后一行:

1667191181427.jpg

按下Enter键,即可退出文档,并返回到了终端:

1667191192796.jpg


(二)输入模式


1、进入输入模式


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

i


首先通过vi命令打开/新建文件:

1667191216390.jpg

按下 i 键,可以看到下方的- -INSERT- -,此时代表的是当前模式为输入模式:

1667191228216.jpg

通过在命令模式下按下以下键都能进入文本输入模式:

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


例如当我们进入命令模式,按下i键,此时光标处于光标前:

1667191248273.jpg

我们再通过Esc键退回至命令模式,这次按下O键,此时可看到光标位于光标所在行的行尾:

1667191259128.jpg

再次通过Esc键退回至命令模式,按下A键,此时可看到光标位于新建的上一行的新行处:

1667191270673.jpg


2、编辑文档


1、单个文档编辑

对文档进行编辑,可以通过Enter键换行、Backspace键删除光标前的一个字符、Del键删除光标当前的字符、方向键上下左右移动光标等等:

1667191289021.jpg

在编辑文档时,可以通过按下以下键进行一些操作,例如可以通过上、下、左、右方向键(而h、j、k、l在输入模式下无法使用,即它会输入字母),如下表:

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


2、多个文档编辑

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

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


例如,下面对两个名称为t1和t2的文档进行编辑:

1667191313988.jpg

这里相当于对当前屏幕分为两个页面进行编辑文件,但是这两个文件是独立的,默认进入是第一个文件(即文件名称为1的文件),此时光标位于第一个文件的第一行行首:

1667191323664.jpg

若想切换文件,可通过ctrl+ww切换,如下切换至t2文件,按下ctrl+ww,切换后可见此时光标位于第二个文件t2的第一行行首:

1667191339082.jpg

例如我们对两个文件编辑后,现在要执行t1文件的第一行内容复制粘贴到t2的第二行,可以进行以下操作:在t1文件中,光标处于首位时按yy,复制当前行,ctrl+ww切换至t2,然后光标移动至第一行末尾,然后按下p,即可复制至t2的第二行:

1667191425950.jpg

此时通过:wq保存并退出,首先退出的是t1文件,然后再是t2文件:

1667191438702.jpg


3、退出编辑文档


当我们对文档的内容编辑好后,想退出时,此时可以通过按下ESC键退出至命令模式,如下,可看到下方的- -INSERT- -已消失,此时的模式为命令模式:

1667191459728.jpg

然后我们想保存并退出该文件,可以通过:wq退出:

1667191471008.jpg

此时我们再通过cat命令查看该文件,如下:

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


在终端中输入命令,可看到就是刚刚编辑文件的内容:

1667191487870.jpg

这里就完成了新建文件——编辑文件——保存文件——查看文件的步骤。


相关文章
|
16天前
|
域名解析 网络协议 安全
|
6天前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
27 9
|
22天前
|
运维 监控 网络协议
|
6天前
|
缓存 运维 网络协议
深入Linux内核架构:操作系统的核心奥秘
深入Linux内核架构:操作系统的核心奥秘
22 2
|
10天前
|
缓存 网络协议 Linux
Linux操作系统内核
Linux操作系统内核 1、进程管理: 进程调度 进程创建与销毁 进程间通信 2、内存管理: 内存分配与回收 虚拟内存管理 缓存管理 3、驱动管理: 设备驱动程序接口 硬件抽象层 中断处理 4、文件和网络管理: 文件系统管理 网络协议栈 网络安全及防火墙管理
31 4
|
8天前
|
安全 网络协议 Linux
Linux操作系统的内核升级与优化策略####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统内核升级的重要性,并详细阐述了一系列优化策略,旨在帮助系统管理员和高级用户提升系统的稳定性、安全性和性能。通过实际案例分析,我们展示了如何安全有效地进行内核升级,以及如何利用调优技术充分发挥Linux系统的潜力。 ####
28 1
|
12天前
|
物联网 Linux 云计算
Linux操作系统的演变与未来趋势####
【10月更文挑战第29天】 本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其在服务器、桌面及嵌入式系统领域的应用现状,并展望了云计算、物联网时代下Linux的未来趋势。通过回顾历史、剖析现状、预测未来,本文旨在为读者提供一个全面而深入的视角,以理解Linux在当今技术生态中的重要地位及其发展潜力。 ####
|
17天前
|
边缘计算 人工智能 运维
Linux操作系统:开源力量的崛起与影响###
一场技术革命的回顾 回溯至1991年,当Linus Torvalds宣布Linux操作系统的诞生时,世界或许并未意识到这一举措将如何深刻地改变技术领域的面貌。本文旨在探讨Linux操作系统的发展历程、核心特性、以及它如何引领了一场开源运动,重塑了软件行业的生态。从最初的个人爱好项目成长为全球最广泛采用的服务器操作系统之一,Linux的故事是技术创新与社区精神共同推动下的辉煌篇章。 ###
|
16天前
|
人工智能 安全 Linux
|
18天前
|
物联网 Linux 5G
Linux操作系统的演变与未来趋势####
本文深入探讨了Linux操作系统的发展历程,从最初的一个学生项目到如今全球最流行的开源操作系统之一。文章将分析Linux的核心优势、关键特性以及它在云计算、物联网和嵌入式系统中的应用前景。通过具体案例展示Linux如何推动技术创新,并预测其在未来技术生态中的角色。本文旨在为读者提供一个全面而深入的理解,帮助他们认识到Linux在现代计算环境中的重要性及其未来的潜力。 ####