宏的概念

什么是宏呢?英文名:macro,代表一串命令的集合。

示例操作文本

SELECT * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`userType`=3)) AND (`status` >= 0) AND (`correctCnt` > 0) ORDER BY `addTime` DESC LIMIT 16 OFFSET 30;
SELECT `imgId`, `taskId`, `imgUrl`, `status`, `ocrResult`, `feedback`, `totalQuestionCount`, `correctQuestionCount`, `finalOcrResult`, `addTime`, `completeTime`, `updateTime` FROM `edu_ocr_img` WHERE (`taskId` IN ('143736', '143725', '143723', '143722', '143715', '143682', '143681', '143677', '143676', '143651')) AND (`status` > 0);
SELECT sum(correctCnt) FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`userType`=3)) AND (`status` >= 0);
UPDATE `edu_ocr_task` SET `status`=-2 WHERE (`userId`=11580815) AND (`status` IN (1, 0)) AND (`userType`=1) AND (`taskId`=224876);
UPDATE `edu_ocr_task` SET `status`=-2 WHERE (`userId`=11580815) AND (`status` IN (1, 0)) AND (`userType`=1);

. 号宏

. 号是英文中的句号.
需要在普通模式中执行.
执行效果为: 重复执行一次上次的修改 (关于修改的定义不做详细解析).

命令序列: cwaaaj.

结果:
(注意 aaa 的位置)

aaa * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`userType`=3)) AND (`status` >= 0) AND (`correctCnt` > 0) ORDER BY `addTime` DESC LIMIT 16 OFFSET 30;
SEaaa `imgId`, `taskId`, `imgUrl`, `status`, `ocrResult`, `feedback`, `totalQuestionCount`, `correctQuestionCount`, `finalOcrResult`, `addTime`, `completeTime`, `updateTime` FROM `edu_ocr_img` WHERE (`taskId` IN ('143736', '143725', '143723', '143722', '143715', '143682', '143681', '143677', '143676', '143651')) AND (`status` > 0);
SELECT sum(correctCnt) FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`userType`=3)) AND (`status` >= 0);
UPDATE `edu_ocr_task` SET `status`=-2 WHERE (`userId`=11580815) AND (`status` IN (1, 0)) AND (`userType`=1) AND (`taskId`=224876);
UPDATE `edu_ocr_task` SET `status`=-2 WHERE (`userId`=11580815) AND (`status` IN (1, 0)) AND (`userType`=1);

录制宏

q 键既是录制的开始, 也是录制的结束按键. 录制过程中会显示recording @{字母}

示例按键: qqdwjq@q@@@@

将每一行的第一个单词删除:

* FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`userType`=3)) AND (`status` >= 0) AND (`correctCnt` > 0) ORDER BY `addTime` DESC LIMIT 16 OFFSET 30;
`imgId`, `taskId`, `imgUrl`, `status`, `ocrResult`, `feedback`, `totalQuestionCount`, `correctQuestionCount`, `finalOcrResult`, `addTime`, `completeTime`, `updateTime` FROM `edu_ocr_img` WHERE (`taskId` IN ('143736', '143725', '143723', '143722', '143715', '143682', '143681', '143677', '143676', '143651')) AND (`status` > 0);
sum(correctCnt) FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`userType`=3)) AND (`status` >= 0);
`edu_ocr_task` SET `status`=-2 WHERE (`userId`=11580815) AND (`status` IN (1, 0)) AND (`userType`=1) AND (`taskId`=224876);
`edu_ocr_task` SET `status`=-2 WHERE (`userId`=11580815) AND (`status` IN (1, 0)) AND (`userType`=1);

示例讲解

qq : q 开启录制宏, 选择 q 这个寄存器放置宏的内容
dwjq : 删除第一个单词, 并且光标下移一行, q 结束录制
@q : 回放存放在 q 寄存器里面的命令
@@: 回放上一次执行的宏

这样一个简单的宏就完成了.

查看宏的内容

:reg q
会显示如下内容:

:reg q
--- Registers ---
"q   dwj         

修改宏

在录制过程中, 难免会录制错误. 那么如何修改你已经录制好的宏呢?

在宏的尾部增加命令

qQ 这回将你之后输入的序列追加到 q 寄存器中, 而不是重新覆盖.

重新编辑宏指令

  1. :tabn | 重新打开一个 tab
  2. :put q | 将 q 寄存器里面的内容复制到当前文件中
  3. 编辑你的宏命令 (在编辑之前有必要先去学习一下宏中的键盘编码)
  4. :d q | 将当前行删除, 并且放到 q 寄存器中
  5. @q | 执行 q 寄存器中的指令

Vim 宏的更多相关文章

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

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

  2. 老板说,Vim宏都不会用,你的工作效率太低啦~

    工作中,对于文本文件的编辑我们经常有这样的需求: 多次重复输入一段相同文本: 生成一段序列化的文本: 每行文本插入一句相同的文本. 除此之外,还有很多需要重复操作的动作.对于这些需求,如果我们人工去操 ...

  3. vim宏录制的操作

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

  4. vim 宏的使用

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

  5. Vim 宏实战操作

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

  6. vim宏录制

    宏录制 当你要重复某一个操作时,录制的宏可以很快地帮你完成任务. 准备文本 <!DOCTYPE html> <html lang="en"> <hea ...

  7. vim重复操作的宏录制

    在编辑某个文件的时候,可能会出现需要对某种特定的操作进行许多次的情况,以编辑下面的文件为例: ;==================================================== ...

  8. VIM辅导:视频教程,文档资料,经典插件

    VIM辅导:25个vim视频' 教程 '资源   转自: http://blog.jobbole.com/10250/ 编注:@程序员的那些事 12月14日在新浪微博发起的<你最常用哪些文本编辑 ...

  9. 0050 Linux VIM 命令

    1.  模式切换 vim的模式 $ vi filename 进入normal 模式,这是命令模式,用于执行大多数常用的编辑命令,不能输入 敲i 进入 insert 模式,这是正常的编辑模式,按Esc ...

随机推荐

  1. 3.django Model

    django ORM基本配置 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 1.修改project数据库配置 (1)settigs.py里面 默认 DAT ...

  2. Elasticsearch Document

    1.  基本概念回顾 1.1.  Node 节点是一个服务器,它是集群的一部分,存储数据,并参与集群的索引和搜索功能 节点有一个名称标识,该名称在缺省情况下是在启动时分配给节点的随机全局惟一标识符(U ...

  3. 华为oj之等差数列前n项和

    题目: 等差数列 热度指数:1010 时间限制:1秒 空间限制:32768K 题目描述 功能: 对于等差数列 2,5,8,11,14- 输入: 正整数N >0 输出: 求等差数列前N项和 返回: ...

  4. Java开发知识之Java中的泛型

    Java开发知识之Java中的泛型 一丶简介什么是泛型. 泛型就是指泛指任何数据类型. 就是把数据类型用泛型替代了. 这样是可以的. 二丶Java中的泛型 Java中,所有类的父类都是Object类. ...

  5. 【Java并发编程】Callable、Future和FutureTask的实现

    启动线程执行任务,如果需要在任务执行完毕之后得到任务执行结果,可以使用从Java 1.5开始提供的Callable和Future 下面就分析一下Callable.Future以及FutureTask的 ...

  6. Docker Compose 引用环境变量

    在项目中,往往需要在 docker-compose.yml 文件中使用环境变量来控制不同的条件和使用场景.本文集中介绍 docker compose 引用环境变量的方式.说明:本文的演示环境为 ubu ...

  7. vue axios 批量删除 数组参数

    方法一:前端循环请求服务器端delete(id)方法 请问如何获得element-ui表格中的勾选项index,以实现批量删除功能 https://segmentfault.com/q/1010000 ...

  8. C# 在PPT幻灯片中创建图表

    图表能够很直观的表现数据在某个时间段的变化趋势,或者呈现数据的整体和局部之间的相互关系,相较于大篇幅的文本数据,图表更增加了我们分析数据时选择的多样性,是我们挖掘数据背后潜在价值的一种更为有效地方式. ...

  9. Python全栈开发之---装饰器

    1.装饰器的形成过程 import time def func1(): print('in func1') def timer(func): def inner(): start = time.tim ...

  10. MySQL高级特性之分区表

    对于用户而言,分区表是一个独立的逻辑表,但是在底层由多个物理子表组成.实现分区的代码实际上是对一组底层表的句柄对象的封装,对分区表的请求都会通过句柄对象转化成对存储引擎的接口调用 意义 MySQL在创 ...