工作中,对于文本文件的编辑我们经常有这样的需求:

  • 多次重复输入一段相同文本;
  • 生成一段序列化的文本;
  • 每行文本插入一句相同的文本。

除此之外,还有很多需要重复操作的动作。对于这些需求,如果我们人工去操作的话,肯定是非常枯燥乏味,并且要浪费很多时间精力。

这时, Vim 宏就派上用场了,它可以通过一些简单的步骤快速完成这些重复性的操作,省时省力!下面详细讲解。

宏的录制和运行

宏的录制

  1. 在 Vim 编辑器中创建新文件或打开现有文件;
  2. q 并跟上 宏名 开始录制。假设我们想要将宏名命名为 b ,则按 Escqb 开始录制;
  3. 文本编辑ing……
  4. q 停止录制。至此,宏的录制已完成。

宏的运行

@宏名 即可运行宏一次,按 次数@宏名 重复运行宏多次。

下面给出实例来详细介绍。

示例-1:使用宏多次生成相同的文本

例如我们要生成 100 行一样的文字,一种比较笨的办法就是复制然后粘贴所需要的遍数。这种效率非常低,而且非常容易出错。有了宏这个工具,一切变得超级简单!

首先,我们在 Vim 编辑器中创建一个名为 file1.txt 的新文件。

然后,我们按 q 之后再按 z 开始录制宏。这里的 z 就是 宏名 ,后面会用到。如果录制正确,底部就会出现 recording @z 字样。

再之后,按 i 然后输入要需要重复的文本。比如这里输入文本 Learning Vim Macros

最后按 q 停止录制,这时 recording @z 就会从底部消失。这样,一个名为 z 的 宏就录制完成了,后续我们就可以利用这个宏来重复完成文字录入工作。

如果你想运行一次刚刚创建的宏,那么将光标移动到文件的所需位置,然后并按 @z 就可以了,这时文字就会被复制一遍。

如果你想要复制 N 多次这行文字,则可以多次运行刚刚那个宏。此时只需在宏前面加 次数 即可。例如 4@z 就可以运行刚才的宏 4 次,相应文字就会被复制 4 遍。

示例-2:使用宏生成序列号

在示例-1里我们是机械重复复制一堆一样的文字,那如果想要生成带序列的文本该如何处理?使用宏也可以轻松完成!

假设我们要生成 101-110 的一系列数字,我们一起来完成这个需求。

首先,在 Vim 编辑器中创建一个名为 file2.txt 的新文件,接着按 i 键入 101.

ESC 退出键入。然后再按 qy 以宏名称 y 开始录制后续的操作。我们将光标移到第一行的开头并按 yy 复制文本,然后按 p 将文本粘贴到下一行。

接着,按 Ctrl + a 将第二行的值从 101 增加到 102 。最后,像之前一样按 q 停止录制,我们的宏就制作完成了。

接下来,就是见证奇迹的时刻!

我们键入 8@y ,刚刚所录制的宏就会运行 8 次,生成从 103110 的连续数字。一键操作,简单高效!

这对于一些带有序列性的文本非常有用,你就无需再重复去做 复制-->改数字 这样重复枯燥的工作,同时效率也会大大提升!

示例-3:在文件的每一行中添加相同的文本

我们在操作数据库的时候,很多情况下一些语句非常相似,比如 insert into items values(100, 20077100050, alvin) 这样的文本,会重复很多次。假如我们现在已经有了要插入的数据,如何快速生成多条 SQL 语句?

在这个例子里,我们假设数据文件 file3.txt 有 4 条数据,如下图示。

首先,我们在 Vim 编辑器中打开数据文件 file3.txt ,然后按 ESC ,再然后按 qd 以宏名 d 开始录制。

将光标转到文件的开头,按 i 键插入文本。然后再输入 insert into items values( ,再接着按 ESCwyw 5 次。

在这里,w 用于转到下一个单词,yw 用于复制当前单词。之所以这里要 5 次是因为这里每行有五部分。分别是 11001 , HDD , Samsung (注意逗号也算一部分)。

之后,按 ESCa 键将光标移动到行尾,再输入 );

最后,按 j 然后按 q 。这里,j 用于移动到下一行,q 用于停止录制。这样我们所需要的宏就制作完成了。

现在,我们想要让下面剩下的 3 行的文本都处理成第一行那样的格式,直接按 3@d 运行宏 3 次就可以实现。这样一来,在数据库中进行插入就会方便很多,而且我们无需手动一个个去更改,简单高效!

结论

我们在写代码过程中,有很多场合文本、代码高度相似,如果我们手动去一个个修改的话,那效率将会非常低。有了 Vim 下宏这个神器,我们可以通过创建和使用不同类型的宏来完成这些重复性工作,从而节省时间和精力,实现高效编辑。

看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!

  1. 关注原创公众号「良许Linux」,第一时间获取最新Linux干货!
  2. 公众号后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
  3. 关注我的博客:lxlinux.net

老板说,Vim宏都不会用,你的工作效率太低啦~的更多相关文章

  1. GUI为什么不设计为多线程(用户事件和底层事件的流程是相反的,每层都加锁效率太低,共用一把锁那就是单线程)

    在我们这批新人转正评审的时候,我师父问了我的小伙伴一个问题:为什么一些更新界面的方法只能在主线程中调用?师父没有问我这个问题,让知其然但不知其所以然的我有种侥幸逃过一难的心情.我想如果回答那是因为An ...

  2. [转帖]基于VIM漏洞CVE-2019-12735的VIM宏后门病毒详解

    基于VIM漏洞CVE-2019-12735的VIM宏后门病毒详解 不明觉厉 只要是人做的东西 就会有bug 就会有安全问题 就看发现bug 或者是发现安全问题 有没有收益了 会用linux的都是比较熟 ...

  3. [No0000191]7种提高工作效率的Vim操作-Vim使用技巧(6)

    Vim一直被认为是一种非常高效的文本编辑器,但是对于普通用户来说,很难在入门的时候就体会到Vim的所谓高效性. 本文介绍7种提高你工作效率和生产力的Vim使用技巧,主要集中在对某个文件范围内的特定目标 ...

  4. 【转】Vim速查表-帮你提高N倍效率

    Vim速查表-帮你提高N倍效率 转自:https://www.jianshu.com/p/6aa2e0e39f99 去年上半年开始全面使用linux进行开发和娱乐了,现在已经回不去windows了. ...

  5. ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas

    ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...

  6. vim宏录制的操作

    1:在vim编辑器normal模式下输入qa(其中a为vim的寄存器) 2:此时在按i进入插入模式,vim编辑器下方则会出现正在录制字样,此时便可以开始操作. 3:需要录制的操作完成后,在normal ...

  7. Vim 宏

    宏的概念 什么是宏呢?英文名:macro,代表一串命令的集合. 示例操作文本 SELECT * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`u ...

  8. vim 宏的使用

    1. 基本使用 q[a-z] 开始录制宏 q  停止录制 @[a-z] 使用宏 @@ 调用最近使用的宏 22@[a-z] 多次重放宏 2. 宏的执行方式 串行方式:5@[a-z] 宏内包含向下一个目标 ...

  9. Vim 宏实战操作

    宏的概念 什么是宏呢?英文名:macro,代表一串命令的集合. 示例操作文本 SELECT * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`u ...

随机推荐

  1. MyBatis 判断条件为等于的时候,常量需要加 .toString()

    当MyBatis 判断条件为等于的时候,常量需要加 .toString() 来转换,这种方法是稳定的,推荐使用,比如: <!-- 正确的,稳定,推荐使用 --> <if test=& ...

  2. 从2019-nCoV趋势预测问题,联想到关于网络安全态势预测问题的讨论

    0. 引言 在这篇文章中,笔者希望和大家讨论一个话题,即未来趋势是否可以被精确或概率性地预测. 对笔者所在的网络安全领域来说,由于网络攻击和网络入侵常常变现出随机性.非线性性的特征,因此纯粹的未来预测 ...

  3. Vue.js——学习笔记(一)

    Vue-自学笔记 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅 ...

  4. 做直播能有多赚钱,Python告诉你

    前面我们介绍了APP爬虫环境的搭建和mitmproxy工具的简单使用,这次我们要来一个简单的APP爬虫,尝试一下APP爬虫的简单实用,顺便让我们看看喜马拉雅上的主播到底有多赚钱. APP爬虫一般分为两 ...

  5. KEMET新型电容器推动了电动汽车技术的发展

    前言:KEMET成立于1919年,总部位于佛罗里达州劳德代尔堡,是全球领先的高端电子组件供应商,KEMET为客户提供业内最广泛的电容器技术选择,以及不断扩大的机电设备,电磁兼容性解决方案和超级电容器. ...

  6. java网络编程——socket实现简单的CS会话

    还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...

  7. docker 学习(四)

    1.Dockerfile简介 1)什么是Dockerfile Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的 ...

  8. 以正确的方式下载和配置 ASP.NET Core 官方源码

    我们可以在Github上面直接查看ASP.NET Core 3.x的源代码,但是我们也可以把源代码下载下来进行查看. 而下载源代码进行查看有很多好处: 任意的导航源代码 内置了一个示例项目 直接调试源 ...

  9. OpenCV3入门(十四)图像特效—挤压、哈哈镜、扭曲

    一.图像挤压特效 1.原理 图像压效果本质的图像坐标的非线性变换,将图像向内挤压,挤压的过程产生压缩变形,从而形成的效果. 挤压效果的实现是通过极坐标的形式,设图像中心为O(x,y),某点距离中心O的 ...

  10. pyppeteer使用时常见的bug及基本使用(转)

    pyppeteer使用时常见的bug及解决办法: https://blog.csdn.net/Mr__lqy/article/details/102626025 pyppeteer的基本使用: htt ...