Linux大数据开发基础:第六节:vi、vim编辑器(二)

2024-06-20 18:32

本文主要是介绍Linux大数据开发基础:第六节:vi、vim编辑器(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节主要内容

  1. 缓冲区的使用
  2. 文件的存盘与读盘
  3. 文本查找
  4. 文本替换

作者:周志湖 
微信号:zhouzhihubeyond 
网名:摇摆少年梦

1. 缓冲区的使用

在利用vim进行文本编辑时,编辑修改后的文本不会立即保存到硬盘上,而是保存在缓冲区中,如果没有把缓冲区里的文件存盘,原始文件不会被更改。vim在打开文件时将文本内容读到缓冲区中,在进行文本编辑时,修改的文本保存在缓冲区,此时硬盘上的原文件不变。下面让我们来演示一下缓冲区的使用。 
假设采用vim 同时打开两个文本文件:

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">root@ubuntu:/home/xtwy<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># vim test2.txt test1.txt</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">
//打开文件后,默认打开的是test2.txt</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">
//此时我们使用:buffers命令可以看查缓冲区</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">
//得到如下结果</span>
:buffers<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> %<span class="hljs-operator" style="box-sizing: border-box;">a</span>   <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test2.txt"</span>                    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>      <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test1.txt"</span>                    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

这里写图片描述

<code class="hljs asciidoc has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">:buffers命令给出的是当前编辑中所有的缓冲区状态,前面的数字是缓冲区的数字标记,第二个标记就是缓冲区当前的状态,紧接着是与缓冲区所关联的文件名。缓冲区的状态有以下几种:<span class="hljs-bullet" style="box-sizing: border-box;">- </span>(非活动的缓冲区)
a (激活缓冲区)
h (隐藏的缓冲区)
% (当前的缓冲区)
# (交换缓冲区)
<span class="hljs-header" style="box-sizing: border-box;">= (只读缓冲区)</span>
+ (已经更改的缓冲区)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

在命令模式输入:open test1.txt进入test1.txt编辑界面,然后再输入:buffers查看缓冲区状态,得到如下结果

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">:buffers<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#    "test2.txt"                    line 1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> %<span class="hljs-operator" style="box-sizing: border-box;">a</span>   <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test1.txt"</span>                    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

这里写图片描述

可以看到此时test1.txt加载为活动缓冲区,而test2.txt则被加载到交换缓冲区。此时利用:bprevious命令可以切换test2.txt为活动缓冲区,

这里写图片描述 
执行后得到: 
这里写图片描述 
可以看到,此时已经切换回到text2.txt,即将text2.txt加载到当前活动缓冲区当中,采用:buffers命令得到如下结果: 
这里写图片描述

更多缓冲区操作命令如下:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:buffers</span>    电焊工缓冲区状态
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:buffer</span> 编辑指定缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:ball</span>   编辑所有缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bnext</span>  到下一缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bprevious</span>  到前一缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:blast</span>  到最后一个缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bfirst</span> 到第一个缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:badd</span>   增加缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bdelete</span>    删除缓冲区
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bunload</span>    卸载缓冲区</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

2. 文件的存盘与读盘

(一)保存并退出

在编辑模式中,如果文本编辑任务已经完成,想直接保存退出,返回到Linux CLI命令行的话,直接按ZZ即可。

(二)读取文件内容到缓冲区

在编辑模式中,采用:r命令读取文件内容到当前缓冲区, 
这里写图片描述 
:r test1.txt可以test1.txt文件内容写到缓冲区 
这里写图片描述

(三)将缓冲区内容写到文件

在编辑模式中,采用:w命令将修改后的文件写到磁盘,也可以使用:wq命令将修改的文件写到磁盘上后退出vim返回inux CLI,如果不想保存直接退出,则使用:q!命令直接退出vim,返回到CLI命令行。

3. 文本查找

(1)一般搜索

使用?或/进行字符串查找,例如: 
这里写图片描述 
回车之后,光标将定位到下一个Spark上,如果还想往下搜索,则按n(next),如果想往上搜索,则按N

(2)正则表达式搜索

正则表达式搜索是指加入了像”^,$,.”等特殊匹配字符,它们的作用如下表:

搜索字符串 搜索描述 举例
:/^Spark 搜索以Spark为开头的行 Spark is ….
:/YARN$ 搜索以YARN为结尾的行 …Hadoop YARN
:/Ha…p 搜索Ha开头,中间有三个字符且以p结尾的字符串 Hadoop、Hadaap
:/e> 查找以e结尾的字符串,其中>符号是字符串结束指示符号,这里\不是转义字符,而是与>组合到一起,来表示特殊意义 like、source
:/\<Had 查找以Had作为开始的字符串,\< 同样具有特殊意义 Hadoop、Hadoo
:/Spa* 查看字符串中出现至少一次Spar的字符串,\< 同样具有特殊意义 Spark、SpaSpark
:/Sp[ae]rk 匹配Spark或Sperk Spark、Sperk

4. 文本替换

文本替换使用以下语法格式:

<code class="hljs markdown has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">:[<span class="hljs-link_label" style="box-sizing: border-box;">g</span>][<span class="hljs-link_reference" style="box-sizing: border-box;">address</span>]s/search-string/replace-string[/option]</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

其中address用于指定替换范围,下表给出的是常用示例:

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">//将当前缓冲区的第一行中的Downloading替换为Download
: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Downloading/Download//将当前缓冲区中的第一行到第五行中的Spark替换为spark
:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Spark/spark//将当前缓冲区中的第一行到当前光标所在行的Spark替换为spark
:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,. <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Spark/spark//将当前光标所在行到缓冲区最后一行的Spark替换为spark
:.,$ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Spark/spark//将整个缓冲区中的Spark替换为spark
:% <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">s/Spark/spark/</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/当前行中第一次搜索到的Spark替换为spark
: s/</span>Spark/spark//将当前行中所有的Spark替换为spark
:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">s/Spark/spark/g</span>  //将所有的<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span>转换成And,不包括theta这种字符串,只会作用于the这种单独存在的字符串
:% <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">s/\<the\>/The/g</span>  </code>

这篇关于Linux大数据开发基础:第六节:vi、vim编辑器(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078921

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

ONLYOFFICE 8.1 版本桌面编辑器测评

在现代办公环境中,办公软件的重要性不言而喻。从文档处理到电子表格分析,再到演示文稿制作,强大且高效的办公软件工具能够极大提升工作效率。ONLYOFFICE 作为一个功能全面且开源的办公软件套件,一直以来都受到广大用户的关注与喜爱。而其最新发布的 ONLYOFFICE 8.1 版本桌面编辑器,更是带来了诸多改进和新特性。本文将详细评测 ONLYOFFICE 8.1 版本桌面编辑器,探讨其在功能、用户

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1