欢迎光临散文网 会员登陆 & 注册

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

2022-01-05 09:20 作者:oeasy  | 我要投稿

宏的进阶 macro

回忆

  • 关于宏,上次有4个要点

    • qa 开始录制宏

    • q 结束录制宏

    • @a 应用宏

    • qA 追加录制宏

  • 甚至可以编辑宏

    • "ap 把宏作为文本粘贴出来

    • 编辑之后

    • "ayy把新的宏装在进入a寄存器reg

  • 这个宏还可以怎么玩呢?🤔

建立环境

  • vi oeasy.txt

  • 插入一下内容

    • a. oeasy

    • b. o2z

    • c. o3z

    • d. o9z

录制新宏

  • qa0W~hjq

    • qa 在a寄存器里面开始录制

    • 0 到行头

    • W 跳一个大词

    • ~ 改变当前光标位置字符的大小写

    • j 向下一行

    • q 停止录制

  • 查看宏

    • :reg a

应用宏

  • 正常模式下直接命令的方式

    • 应用99行

    • 应用到当前行

    • @a

    • 99@a

  • u回来

  • 用命令行的方式

    • 切换模式并对2-4行执行@a

    • 切换到normal模式并对当前行执行@a

    • :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

    • jk彼此抵消

  • 在文档最后把寄存器a中的存储的宏粘贴出来

    • Go"ap出来

    • 修改为0W~A.<esc>j

  • 重新定义宏a

    • "ay$

  • 观察宏a

    • :reg a

  • 批量执行

    • :% normal @a

多文件执行

  • 除了oeasy.txt之外

  • 还有o2z.txto3z.txt

    • :!cp oeasy.txt o2z.txt

    • :!cp oeasy.txt o3z.txt

  • 批量执行

    • 保存所有文件修改

    • 对于args中的每个文件中的每一行执行a这个宏

    • g global全局执行

    • 匹配任何字符匹配每一行.*

    • 如果是o.*对应的是以o开头的每一行

    • normal @a 正常模式下执行@a

    • 列出所有参数

    • 添加当前文件夹下的所有txt文档

    • :arga *.txt

    • :args

    • :argdo g/.*/normal @a

    • :argdo w

快速执行

  • @@

    • 执行上一条宏

  • :2,5@

    • 第2-5行执行上一条宏

递归执行宏

  • 文件还是这样的oeasy.txt

    • a. oeasy

    • b. o2z

    • c. o3z

    • d. o9z

  • qaqqa0W~j@aq

    • 停止录制

    • 执行宏a

    • 往下跳一行

    • 改变大小写

    • 跳大词

    • 到第一列

    • 开始录制a

    • 把a宏清空

    • qaq

    • qa

    • 0

    • W

    • ~

    • j

    • @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

      • 往下一行

      • 把{}里面的内容小写

      • 跳到{

      • 到第1列

      • 开始录制宏a

      • qa

      • 0

      • f{

      • gui{

      • j

      • q 停止录制

    • 运行宏

      • 99@a

      • 会卡到第4行

      • 因为找不到{

    • 这个时候可以并发执行

      • :1,$ normal @a

      • 从第1行到最后一行每一行都在normal模式下执行@a

    总结

    • 关于宏,我们回忆一下

      • qa 开始录制宏

      • q 结束录制宏

      • @a 应用宏

      • qA 追加录制宏

      • 控制寄存器内容其实就是控制宏

    • 宏还有一些特性

      • 可以多文件执行宏

      • 可以并发运行宏

      • 可以递归执行宏

    • 宏是随录随用的的

    • 我想把一些东西固定下来,让他到时候不用定义就能执行

    • 可以么?🤔

    • 下次再说!
      [Github地址] (https://github.com/overmind1980/oeasyvim)
      [Gitee地址] (https://gitee.com/overmind1980/oeasyvim)
      [蓝桥实验楼 邀请码FJWYIMGB] (https://www.lanqiao.cn/courses/2840)


    oeasy教您玩转vim - 81 - # 宏macro的进阶的评论 (共 条)

    分享到微博请遵守国家法律