回忆
建立环境
- vi
oeasy.txt
- 插入一下内容
- a. oeasy
- b. o2z
- c. o3z
- d. o9z
录制新宏
-
qa0W~hjq
- qa 在a寄存器里面开始录制
- 0 到行头
- W 跳一个大词
- ~ 改变当前光标位置字符的大小写
- j 向下一行
- q 停止录制
-
查看宏
应用宏
- 正常模式下直接命令的方式
-
u回来
- 用命令行的方式
-
:normal @a
-
:2,4 normal @a
-
u回来
追加宏
-
gg
回到最初
-
qAkA.<Esc>jq
-
qA
追加录制宏到a寄存器
-
k
是为了抵消上面的 j
-
A
追加在本行最后
-
.
写一个.
-
<Esc>
退回到正常模式
-
j
向下一行
-
q
退出录制
- 这部分内容,就被追加到宏a里面
- 可以
:reg a
看到
0W~hjkA.<esc>j
:% normal @a
-
u回来
修改宏 macro
:reg a
- 目前
0W~hjkA.<esc>j
中
- 在文档最后把寄存器a中的存储的宏粘贴出来
- 重新定义宏a
- 观察宏a
- 批量执行
多文件执行
- 除了
oeasy.txt
之外
- 还有
o2z.txt
、o3z.txt
:!cp oeasy.txt o2z.txt
:!cp oeasy.txt o3z.txt
- 批量执行
-
:arga *.txt
-
:args
-
:argdo g/.*/normal @a
- 对于args中的每个文件中的每一行执行a这个宏
- g global全局执行
- 匹配任何字符匹配每一行.*
- 如果是
o.*
对应的是以o开头的每一行
- normal @a 正常模式下执行@a
-
:argdo w
快速执行
递归执行宏
-
文件还是这样的oeasy.txt
- a. oeasy
- b. o2z
- c. o3z
- d. o9z
-
qaqqa0W~j@aq
-
然后运行
-
这样他就是自己执行自己
-
直到最后一行无法再递归调用
-
就自动跳出了
并行执行
-
有素材如下
- import { FUNC1 } from "oeasy";
- import { FUNC2 } from "o2z";
- import { FUNC3 } from "o3z";
- import function from "o9z";
- import { FUNC4 } from "o9z";
- import { FUNC5 } from "orz";
-录制宏
-
qa0f{gui{jq
-
运行宏
-
这个时候可以并发执行
:1,$ normal @a
- 从第1行到最后一行每一行都在normal模式下执行@a
总结
- 关于宏,我们回忆一下
- qa 开始录制宏
- q 结束录制宏
- @a 应用宏
- qA 追加录制宏
- 控制寄存器内容其实就是控制宏
- 宏还有一些特性
- 宏是随录随用的的
- 我想把一些东西固定下来,让他到时候不用定义就能执行
- 可以么?🤔
- 下次再说!
教程来源于Github,感谢overmind1980大佬的无私奉献,致敬!
如何设计一个秒杀系统 -〔许令波〕
编辑训练营 -〔总编室〕
分布式协议与算法实战 -〔韩健〕
高楼的性能工程实战课 -〔高楼〕
如何成为学习高手 -〔高冷冷〕
程序员的测试课 -〔郑晔〕
eBPF核心技术与实战 -〔倪朋飞〕
手把手带你搭建推荐系统 -〔黄鸿波〕
AI大模型企业应用实战 -〔蔡超〕