Vim 宏实战操作
宏的概念
什么是宏呢?英文名: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 寄存器中, 而不是重新覆盖.
重新编辑宏指令
- :tabn | 重新打开一个 tab
- :put q | 将
q寄存器里面的内容复制到当前文件中 - 编辑你的宏命令 (在编辑之前有必要先去学习一下
宏中的键盘编码) - :d q | 将当前行删除, 并且放到
q寄存器中 - @q | 执行
q寄存器中的指令
Vim 宏实战操作的更多相关文章
- [转帖]基于VIM漏洞CVE-2019-12735的VIM宏后门病毒详解
基于VIM漏洞CVE-2019-12735的VIM宏后门病毒详解 不明觉厉 只要是人做的东西 就会有bug 就会有安全问题 就看发现bug 或者是发现安全问题 有没有收益了 会用linux的都是比较熟 ...
- 老板说,Vim宏都不会用,你的工作效率太低啦~
工作中,对于文本文件的编辑我们经常有这样的需求: 多次重复输入一段相同文本: 生成一段序列化的文本: 每行文本插入一句相同的文本. 除此之外,还有很多需要重复操作的动作.对于这些需求,如果我们人工去操 ...
- vim宏录制的操作
1:在vim编辑器normal模式下输入qa(其中a为vim的寄存器) 2:此时在按i进入插入模式,vim编辑器下方则会出现正在录制字样,此时便可以开始操作. 3:需要录制的操作完成后,在normal ...
- Vim 宏
宏的概念 什么是宏呢?英文名:macro,代表一串命令的集合. 示例操作文本 SELECT * FROM `edu_ocr_task` WHERE ((`userId`=284871) AND (`u ...
- vim 宏的使用
1. 基本使用 q[a-z] 开始录制宏 q 停止录制 @[a-z] 使用宏 @@ 调用最近使用的宏 22@[a-z] 多次重放宏 2. 宏的执行方式 串行方式:5@[a-z] 宏内包含向下一个目标 ...
- vim宏录制
宏录制 当你要重复某一个操作时,录制的宏可以很快地帮你完成任务. 准备文本 <!DOCTYPE html> <html lang="en"> <hea ...
- vim重复操作的宏录制
在编辑某个文件的时候,可能会出现需要对某种特定的操作进行许多次的情况,以编辑下面的文件为例: ;==================================================== ...
- VIM辅导:视频教程,文档资料,经典插件
VIM辅导:25个vim视频' 教程 '资源 转自: http://blog.jobbole.com/10250/ 编注:@程序员的那些事 12月14日在新浪微博发起的<你最常用哪些文本编辑 ...
- 0050 Linux VIM 命令
1. 模式切换 vim的模式 $ vi filename 进入normal 模式,这是命令模式,用于执行大多数常用的编辑命令,不能输入 敲i 进入 insert 模式,这是正常的编辑模式,按Esc ...
随机推荐
- [译]C# 7系列,Part 9: ref structs ref结构
原文:https://blogs.msdn.microsoft.com/mazhou/2018/03/02/c-7-series-part-9-ref-structs/ 背景 在之前的文章中,我解释了 ...
- 电商设计V1(一):软件工程设计
软件工程设计的方式方法 多视图法: 全面分析软件方方面面的问题 尽早地发现和排除项目风险与不确定因素 从不同角度去展现要设计的软件系统 为项目进行不同的干系人提供指导: 逻辑架构描述系统功能,并指导系 ...
- JS---封装缓动(变速)动画函数---增加任意多个属性&增加回调函数
封装缓动(变速)动画函数---增加任意多个属性&增加回调函数 回掉函数fn,在所有元素到达目的位置后,判断是否传入一个函数,有就调用 if(fn){fn()}; 这样一次点击,产生多个动画 & ...
- iOS核心动画高级技巧 - 6
11. 基于定时器的动画 基于定时器的动画 我可以指导你,但是你必须按照我说的做. -- 骇客帝国 在第10章“缓冲”中,我们研究了CAMediaTimingFunction,它是一个通过控制动画缓冲 ...
- day05生成随机数、do-while循环、for循环、循环流控(break和continue)、循环嵌套
复习 1.多重if 一个条件触发的情况在3种或以上时 if(<条件1>){ //条件1为真时运行 }else if(<条件2>){ //条件1为假,条件2为真时运行 }else ...
- 让 Lua 访问数据库
Lua 自身并没有提供访问数据库的函数,但是借助外部扩展库我们可以很容易实现对数据库的各种操作,下面就为大家介绍这样一个扩展库 - LuaSQL,你可以在下载区得到它. LuaSQL 定义了一套简单的 ...
- spinand之data buffer
data buffer简介 spinand一般会有一个内置的data buffer. 以W25N01GV为例,一个page是2048bytes外加64bytes的spare数据,其data buffe ...
- Java面试官:兄弟,你确定double精度比float低吗?
我有一个朋友,叫老刘,戴着度数比我还高的近视镜,显得格外的"程序员":穿着也非常"不拘一格",上半身是衬衣西服,下半身是牛仔裤运动鞋. 我和老刘的感情非常好,每 ...
- 设计模式(含UML、设计原则、各种模式讲解链接)
一.统一建模语言UML UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法 UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进 ...
- [追热点]Rust学习资源整理
为什么选择Rust 在一次演讲中,谈到微软为解决相应内存问题所做的工作,微软研究人员 Matthew Parkinson 提到了微软正在开发的基于 Rust 的新编程语言 Verona. 摘自:[Ru ...