宏的概念

什么是宏呢?英文名: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 宏

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

  5. vim 宏的使用

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

  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. [译]C# 7系列,Part 9: ref structs ref结构

    原文:https://blogs.msdn.microsoft.com/mazhou/2018/03/02/c-7-series-part-9-ref-structs/ 背景 在之前的文章中,我解释了 ...

  2. 电商设计V1(一):软件工程设计

    软件工程设计的方式方法 多视图法: 全面分析软件方方面面的问题 尽早地发现和排除项目风险与不确定因素 从不同角度去展现要设计的软件系统 为项目进行不同的干系人提供指导: 逻辑架构描述系统功能,并指导系 ...

  3. JS---封装缓动(变速)动画函数---增加任意多个属性&增加回调函数

    封装缓动(变速)动画函数---增加任意多个属性&增加回调函数 回掉函数fn,在所有元素到达目的位置后,判断是否传入一个函数,有就调用 if(fn){fn()}; 这样一次点击,产生多个动画 & ...

  4. iOS核心动画高级技巧 - 6

    11. 基于定时器的动画 基于定时器的动画 我可以指导你,但是你必须按照我说的做. -- 骇客帝国 在第10章“缓冲”中,我们研究了CAMediaTimingFunction,它是一个通过控制动画缓冲 ...

  5. day05生成随机数、do-while循环、for循环、循环流控(break和continue)、循环嵌套

    复习 1.多重if 一个条件触发的情况在3种或以上时 if(<条件1>){ //条件1为真时运行 }else if(<条件2>){ //条件1为假,条件2为真时运行 }else ...

  6. 让 Lua 访问数据库

    Lua 自身并没有提供访问数据库的函数,但是借助外部扩展库我们可以很容易实现对数据库的各种操作,下面就为大家介绍这样一个扩展库 - LuaSQL,你可以在下载区得到它. LuaSQL 定义了一套简单的 ...

  7. spinand之data buffer

    data buffer简介 spinand一般会有一个内置的data buffer. 以W25N01GV为例,一个page是2048bytes外加64bytes的spare数据,其data buffe ...

  8. Java面试官:兄弟,你确定double精度比float低吗?

    我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的"程序员":穿着也非常"不拘一格",上半身是衬衣西服,下半身是牛仔裤运动鞋. 我和老刘的感情非常好,每 ...

  9. 设计模式(含UML、设计原则、各种模式讲解链接)

    一.统一建模语言UML UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法 UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进 ...

  10. [追热点]Rust学习资源整理

    为什么选择Rust 在一次演讲中,谈到微软为解决相应内存问题所做的工作,微软研究人员 Matthew Parkinson 提到了微软正在开发的基于 Rust 的新编程语言 Verona. 摘自:[Ru ...