oeasy教您玩转vim - 81 - # 宏macro的进阶

宏的进阶 macro 回忆

  • 关于宏,上次有4个要点
    • qa 开始录制宏
    • q 结束录制宏
    • @a 应用宏
    • qA 追加录制宏
  • 甚至可以编辑宏
    • "ap 把宏作为文本粘贴出来
    • 编辑之后
    • "ayy把新的宏装在进入a寄存器reg
  • 这个宏还可以怎么玩呢?
建立环境
  • vi oeasy.txt
  • 插入一下内容
    • a. oeasy
    • b. o2z
    • c. o3z
    • d. o9z
oeasy教您玩转vim - 81 - # 宏macro的进阶
文章图片

录制新宏
  • qa0W~hjq
    • qa 在a寄存器里面开始录制
    • 0 到行头
    • W 跳一个大词
    • ~ 改变当前光标位置字符的大小写
    • j 向下一行
    • q 停止录制
  • 查看宏
    • :reg a
应用宏
  • 正常模式下直接命令的方式
    • @a
      • 应用到当前行
    • 99@a
      • 应用99行
  • u回来
  • 用命令行的方式
    • :normal @a
      • 切换到normal模式并对当前行执行@a
    • :2,4 normal @a
      • 切换模式并对2-4行执行@a
  • u回来
追加宏
  • gg 回到最初
  • qAkA.jq
    • qA 追加录制宏到a寄存器
    • k 是为了抵消上面的 j
    • A 追加在本行最后
    • .写一个.
    • 退回到正常模式
    • j 向下一行
    • q 退出录制
  • 这部分内容,就被追加到宏a里面
    • 可以:reg a看到
    • 0W~hjkA.j
  • :% normal @a
  • u回来
修改宏 macro
  • :reg a
  • 目前0W~hjkA.j
    • jk彼此抵消
  • 【oeasy教您玩转vim - 81 - # 宏macro的进阶】在文档最后把寄存器a中的存储的宏粘贴出来
    • Go"ap出来
    • 修改为0W~A.j
  • 重新定义宏a
    • "ay$
  • 观察宏a
    • :reg a
  • 批量执行
    • :% normal @a
多文件执行

  • 除了oeasy.txt之外
  • 还有o2z.txto3z.txt
    • :!cp oeasy.txt o2z.txt
    • :!cp oeasy.txt o3z.txt
  • 批量执行
    • :arga *.txt
      • 添加当前文件夹下的所有txt文档
    • :args
      • 列出所有参数
    • :argdo g/.*/normal @a
      • 对于args中的每个文件中的每一行执行a这个宏
      • g global全局执行
      • 匹配任何字符匹配每一行.*
      • 如果是o.*对应的是以o开头的每一行
      • normal @a 正常模式下执行@a
    • :argdo w
      • 保存所有文件修改
快速执行
  • @@
    • 执行上一条宏
  • :2,5@
    • 第2-5行执行上一条宏
递归执行宏
  • 文件还是这样的oeasy.txt
    • a. oeasy
    • b. o2z
    • c. o3z
    • d. o9z
  • qaqqa0W~j@aq
    • qaq
      • 把a宏清空
    • qa
      • 开始录制a
    • 0
      • 到第一列
    • W
      • 跳大词
    • ~
      • 改变大小写
    • j
      • 往下跳一行
    • @a
      • 执行宏a
    • q
      • 停止录制
  • 然后运行
  • 这样他就是自己执行自己
  • 直到最后一行无法再递归调用
  • 就自动跳出了
并行执行
  • 有素材如下
    • 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
    • qa
      • 开始录制宏a
    • 0
      • 到第1列
    • f{
      • 跳到{
    • gui{
      • 把{}里面的内容小写
    • j
      • 往下一行
    • q 停止录制
  • 运行宏
    • 99@a
    • 会卡到第4行
    • 因为找不到{
  • 这个时候可以并发执行
    • :1,$ normal @a
    • 从第1行到最后一行每一行都在normal模式下执行@a
总结
  • 关于宏,我们回忆一下
    • qa 开始录制宏
    • q 结束录制宏
    • @a 应用宏
    • qA 追加录制宏
    • 控制寄存器内容其实就是控制宏
  • 宏还有一些特性
    • 可以多文件执行宏
    • 可以并发运行宏
    • 可以递归执行宏
  • 宏是随录随用的的
  • 我想把一些东西固定下来,让他到时候不用定义就能执行
  • 可以么?
  • 下次再说!
    [Github地址] (https://github.com/overmind19...)
    [Gitee地址] (https://gitee.com/overmind198...)
    [蓝桥实验楼 邀请码FJWYIMGB] (https://www.lanqiao.cn/course...)

    推荐阅读