宏的进阶 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

应用宏

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

    • @a

      • 应用到当前行
    • 99@a

      • 应用99行
  • u回来
  • 用命令行的方式

    • :normal @a

      • 切换到normal模式并对当前行执行@a
    • :2,4 normal @a

      • 切换模式并对2-4行执行@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
  • 批量执行

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

总结

oeasy教您玩转vim - 81 - # 宏macro的进阶的更多相关文章

  1. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  2. oeasy教您玩转vim - 57 - # 行可视化

    ​ 可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...

  3. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...

  4. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  5. oeasy 教您玩转linux010101查看内核uname

    linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...

  6. oeasy教您玩转linux010202软件包管理apt

    顾一下 上一部分我们都讲了什么?

  7. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

  8. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  9. oeasy教您玩转python - 006 - # hello world

    ​ Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...

  10. oeasy教您玩转linux-010110内容回顾

    我们来回顾一下 我们都讲了什么?

随机推荐

  1. 配置Ingress支持HTTPS访问(二):使用cert-manager申请证书

    目录 一.系统环境 二.前言 三.Let's Encrypt和cert-manager简介 四.部署cert-manager 4.1 安装cert-manager 4.2 创建clusterissue ...

  2. flask blinker信号

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为. pip3 install blinker 1.内置信号 request_started = _ ...

  3. IDEA使用——生成超文本格式的(HTML)JavaDoc

    概述 在大型项目中不免会有很多对外暴露的方法与接口,那我们就需要在类或者方法上面按照JavaDoc标准编写注释,就比如这样: 前面我们也提到过在Idea中可以将鼠标停留在方法名上,然后点击F2查看方法 ...

  4. 深入理解 Swoole 的底层加载原理

    首发原文链接:深入理解 Swoole 的底层加载原理 PHP 扩展加载 我们从 php-src/sapi/cli/php_cli.c:1159 文件的入口函数 int main(int argc, c ...

  5. js 实现简易时钟效果

    大江东去,浪淘尽,千古风流人物.故垒西边,人道是,三国周郎赤壁.乱石穿空,惊涛拍岸,卷起千堆雪.江山如画,一时多少豪杰.遥想公瑾当年,小乔初嫁了,雄姿英发.羽扇纶巾,谈笑间,樯橹灰飞烟灭.故国神游,多 ...

  6. 采用Dapr 的IoT 案例

    CNCF 发布了一篇Dapr 的IoT 案例:Tempestive uses Dapr and K8s to track IoT messages | CNCF.Tempestive 是一家物联网解决 ...

  7. react类组件

    使用ES6语法的class创建的组件(有状态组件) 类名称必须要大写字母开头 类组件要继承React.Component父类,从而可以使用父类中提供的方法或者属性 类组件必须提供 render 方法, ...

  8. echarts的示例跟做出来的不一样

    先给大家看下我做出来的和echarts官网做出来的 代码什么的都是一模一样但是颜色不一样 它字的颜色和柱状图颜色还一样不知道是不是脑子有猫病~ 上面是我做的  下面是官网的 主要是代码都是一样 我又不 ...

  9. ABC330

    D 记录每一行,每一列有多少个 o,然后统计答案即可. code E 想到 \(mex^{i \le n}_{i = 1} a_i \le n\) 这整个题就可做了(赛时因为没想到这个,痛失 \(47 ...

  10. 你唯一需要的是“Wide Events”,而非“Metrics、Logs、Traces”

    Charity Majors 的这句话可能是对科技行业当前可观察性状态的最好总结--完全的.大规模的混乱.大家都很困惑.什么是 trace?什么是 span?一行日志就是一个 span 吗?如果我有日 ...