Linux CentOS7 vim重复行

在用vim编辑处理文件时,会有重复行。有的是情境需要,有的可能是误操作而形成。对于正常形成的重复行,我们不作讨论,我们仅讨论什么情况下会出现重复行,如何避免,如何处理。

在文件中的单行或多个连续空白行,我们不作处理。这可能是格式需要。

一、出现重复行

1.现象

很多新手容易出现的现象:编辑vim后出现很多重复行

2.原因

原因也很简单,vim具有数字+命令的多次重复执行命令的功能,也就是说,允许数字+命令的语法格式,表示重复执行命令,其重复次数就是命令前的数字。

如在命令模式下,5yy:从光标所在行开始且包括当前行,共复制5行;3dd:从光标所在行开始(含当前行),共删除3行;7p:在光标所在行后粘贴7次前面复制的内容。

新手是如何操作,才造成的重复行呢?

新手操作vim最容易犯的错误就是用vim打开文件就开始录入内容。不显示内容时就用鼠标点点点。

当录入某些数字后,发现没有模式切换,就又按了i/I,或按了a/A。在编辑模式下,录入一些内容后,按Esc键返回命令模式。这时就会出现重复的多行内容(就是前面录入的内容)。

3.案例

我们对此过程进行模拟操作,重现此类现象。

a.打开文件

我们先准备一个文本文件test.txt:

b.录入数字

用vim test.txt打开文件,(在命令模式下)直接录入数字123(可以是小键盘录入,也可以是主键盘上的123,不影响后续结果)。

c.切换模式

再按i键,进入编辑模式

d.录入内容

移动光标,在abcde行下录入ABCD,按回车

e.退出

按Esc,退出编辑模式,vim的文本内容将出现如下效果:

文件中的其他部分内容不变!录入的内容本来希望一行“ABCD”,现在出现很多行(123行)。

二、避免重复行

1.知道原因

了解vim模式的使用,在不同模式下操作不同的命令或内容。

如果因操作不当,产生了重复行,可以返回到命令模式下,按u取消原来的操作。

2.操作注意

不在命令模式下录入数字,或录入数字后及时按Esc,取消刚才的操作。

如确实需要部分内容重复,可以按此方法,产生需要的重复行。

三、删除重复行

删除重复行的操作十分普遍。

如果找不到产生重复行的原因,或拷贝内容时产生了多余的重复行,将如何删除重复行呢?

vim删除重复行方法很多,原理基本相同:先排序,再应用正则表达式查找相同行,并删除(特定条件下,不排序,直接去除重复行)。

在后续的讨论中,我们需要一些重复行,将按前述介绍操作产生重复行。

1.sort u

sort命令应用比较多,具有排序功能。u是uniq去除重复命令的简写。

        : sort u

命令执行后效果:

此命令也可以再简化为sor[t] u,执行时可以不写t。

2.%!uniq

在前面删除重复行操作后,可以在命令模式下,按u,返回到有重复行状态。

录入命令:

        : %!uniq

效果如前,去除了重复行,仅保留一行内容。

3.w !uniq > %

再次按下u,返回到有重复行状态。

执行命令(底行模式下):

        : w !uniq > %

执行命令后,有两项选择,如下:

选择 O,确认后,仍需按确认键继续。

返回原来状态。

选择 L,确认后,仍需按确认键继续,最终是删除重复行:

4. sor ur /^/

再次按下u,返回到有重复行状态。

执行命令(底行模式下):

        : sor ur /^/

效果与前面基本一致。最大的不同,是在去除重复行的同时,不打乱原来文件内容。

在前面的命令中,不加/^/时,也可以排序、去重。但加上/^/将仅去重,不进行打乱文件内容而排序。

如把命令修改为sor u /^/,结果也将是排序、去重。

5.g/^\(.\+\)$\n\1/d

再次按下u,返回到有重复行状态。

执行命令(底行模式下):

        : g/^\(.\+\)$\n\1/d

命令解释

在命令g/^\(.\+\)$\n\1/d中:

        g全局

        ^行首

        .\+此处有1到多个任意字符

        \(\)用括号包起来形成第一个分组

        $行尾

        \n换行

        \1反向引用第一个分组

        /d删除

本案例中,没有执行排序命令,直接执行去重命令:

下面使用替换来删除所有重复行(仅保留第一行,同时删除后面的重复行)。这是该g//d方法的一种变体。

        : %s/^\(.*\)\(\n\1\)\+$/\1/

去除重复行,仅保留一行!

        : %s/\v^(.*)(\n\1)+$/\1/

去除重复行,仅保留一行!

        : %s/\(.\+\)$\n\1/\1/g

不能一次去除重复行,可以多次执行,最后只保留一行。

另外还有一些别的命令,也可以试一试:

        :g/\%(^\1$\n\)\@<=\(.*\)$/d     //功能同上,也是去除重复行

        :g/\%(^\1\>.*$\n\)\@<=\(\k\+\).*$/d  //功能同上,也是去除重复行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/95192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Unity】3D贪吃蛇游戏制作/WebGL本地测试及项目部署

本文是Unity3D贪吃蛇游戏从制作到部署的相关细节 项目开源代码&#xff1a;https://github.com/zstar1003/3D_Snake 试玩链接&#xff1a;http://xdxsb.top/Snake_Game_3D 效果预览&#xff1a; 试玩链接中的内容会和该效果图略有不同&#xff0c;后面会详细说明。 游戏规则 …

【C语言】内存函数的详细教学和模拟实现

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是gugugu。希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f194;本文由 gugugu 原创 CSDN首发&#x1f412; 如需转载还请通知⚠…

互联网Java工程师面试题·Dubbo篇·第一弹

目录 1、为什么要用 Dubbo&#xff1f; 2、Dubbo 的整体架构设计有哪些分层? 3、默认使用的是什么通信框架&#xff0c;还有别的选择吗? 4、服务调用是阻塞的吗&#xff1f; 5、一般使用什么注册中心&#xff1f;还有别的选择吗&#xff1f; 6、默认使用什么序列化框架&…

学习记忆——宫殿篇——记忆宫殿——记忆桩——卧室——莫兰勋爵在地铁走失的案子

《神探夏洛克》第三季第一集中提到“思维殿堂”&#xff0c;其实指的就是记忆宫殿。讲述了一个名叫莫兰勋爵在地铁走失的案子&#xff0c;这里简单给大家罗列以下破案信息&#xff1a; 订阅报纸的男人、伦敦养狗的女人、穿着黑色运动的非裔女人、松木、云杉、雪松、新樟脑球、碳…

AtCoder Beginner Contest 232(A-G)

A - QQ solver (atcoder.jp)直接按题意模拟即可。 B - Caesar Cipher (atcoder.jp)按题意模拟即可 C - Graph Isomorphism (atcoder.jp)按题意模拟即可 D - Weak Takahashi (atcoder.jp) 一个非常套路的网格dp E - Rook Path (atcoder.jp) &#xff08;1&#xff09;题意 有…

探秘前后端开发世界:猫头虎带你穿梭编程的繁忙街区,解锁全栈之路

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【Java】接口 interface

目录 概述 示例代码&#xff1a; 接口成员访问特点 示例代码&#xff1a; 概述 什么是接口 接口就是一种公共的规范标准&#xff0c;只要符合规范标准&#xff0c;大家都可以调用。 Java 中的接口更多的体现在对行为的抽象&#xff01; 1. 接口 用关键字 interface 修饰 pub…

从零手搓一个【消息队列】创建核心类, 数据库设计与实现

文章目录 一、创建核心类1, 交换机2, 交换机类型3, 队列4, 绑定5, 交换机转发 & 绑定规则6, 消息7, 消息属性 二、数据库设计1, 使用 SQLite2, 使用 MyBatis2.1, 创建 Interface2.2, 创建 xml 文件 三、硬盘管理 -- 数据库1, 创建 DataBaseManager 类2, init() 初始化数据库…

算法题系列10·最长公共前缀

目录 题目描述 思路 实现 题目描述 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串 ""。示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;&qu…

LabVIEW开发教学实验室自动化INL和DNL测试系统

LabVIEW开发教学实验室自动化INL和DNL测试系统 如今&#xff0c;几乎所有的测量仪器都是基于微处理器的设备。模拟输入量在进行数字处理之前被转换为数字量。对于参加电气和电子测量课程的学生来说&#xff0c;了解ADC以及如何欣赏其性能至关重要。ADC的不确定性可以根据其传输…

蓝桥杯每日一题2023.10.5

3420. 括号序列 - AcWing题库 题目描述 题目分析 对于这一我们需要有前缀知识完全背包 完全背包的朴素写法&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1010; int n, m, v[N], w[N], f[N][N]; int main() {cin >> n >> m;fo…

PyTorch实例:简单线性回归的训练和反向传播解析

文章目录 &#x1f966;引言&#x1f966;什么是反向传播&#xff1f;&#x1f966;反向传播的实现&#xff08;代码&#xff09;&#x1f966;反向传播在深度学习中的应用&#x1f966;链式求导法则&#x1f966;总结 &#x1f966;引言 在神经网络中&#xff0c;反向传播算法…

华为OD七日集训第6期 十一特辑 - 按算法分类,由易到难,循序渐进,玩转OD

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、优先队列4、滑动窗口5、二叉树6、并查集7、栈 三、算法1、基础算法① 贪心算法② 二分查找③ 分治…

OpenCV 15(SIFT/SURF算法)

一、SIFT Harris和Shi-Tomasi角点检测算法&#xff0c;这两种算法具有旋转不变性&#xff0c;但不具有尺度不变性&#xff0c;以下图为例&#xff0c;在左侧小图中可以检测到角点&#xff0c;但是图像被放大后&#xff0c;在使用同样的窗口&#xff0c;就检测不到角点了。 尺度…

JavaScript操作CSS样式

上节课我们基本完成了游戏的主体&#xff0c;这节课我们来学习如果使用JavaScript去操作CSS样式 ● 例如&#xff0c;我们现在想当玩家输入对的数字之后&#xff0c;我们讲背景改为绿色&#xff0c;并且把number的框宽度变大 const secretnumber Math.trunc(Math.random() * …

经典算法-----汉诺塔问题

前言 今天我们学习一个老经典的问题-----汉诺塔问题&#xff0c;可能在学习编程之前我们就听说过这个问题&#xff0c;那这里我们如何去通过编程的方式去解决这么一个问题呢&#xff1f;下面接着看。 汉诺塔问题 问题描述 这里是引用汉诺塔问题源自印度一个古老的传说&#x…

目前制造企业生产计划现状是什么?有没有自动化排产系统?

大家都知道&#xff0c;人的指挥中心是大脑&#xff0c;大脑对我们的发出各种各样的指令&#xff0c;告诉我们&#xff1a;“手”做什么事情&#xff0c;“眼睛”看什么地方&#xff0c;“耳朵”听什么声音&#xff0c;然后再将摸到的、看到的、听到的信息传递给大脑&#xff0…

制作 3 档可调灯程序编写

PWM 0~255 可以将数据映射到0 75 150 225 尽可能均匀电压间隔

maven下载、本地仓库设置与idea内置maven设置

一、下载安装maven maven下载官网&#xff1a;https://maven.apache.org/download.cgi 下载到本地后解压 二、配置环境变量 我的电脑-属性-高级系统设置-环境变量/系统变量 新建MAVEN_HOME 变量值为自己的maven包所在的位置 编辑path 添加 %MAVEN_HOME%\bin 三、测试 Win…

一个案例熟悉使用pytorch

文章目录 1. 完整模型的训练套路1.2 导入必要的包1.3 准备数据集1.3.1 使用公开数据集&#xff1a;1.3.2 获取训练集、测试集长度&#xff1a;1.3.3 利用 DataLoader来加载数据集 1.4 搭建神经网络1.4.1 测试搭建的模型1.4.2 创建用于训练的模型 1.5 定义损失函数和优化器1.6 使…