作者: sweetBoy_9126 | 来源:发表于2022-08-21 21:16 被阅读0次

作用

可以录制一系列动作

开始录制

qa
a 是寄存器的名称,也可以是其他任意字母

结束录制

q

查看录制好的宏

:reg+空格+a+回车

使用

  1. 直接使用
    @a
    a 是寄存器的名字

  2. 调用最后一次执行的宏
    @@
    对于需要连续调用的宏来说,这个命令十分有用

  3. 重复执行
    数字 + @ + 寄存器名称
    比如:10@a -> 执行 a 这个宏10 次

示例

1. one
2. two
3. three
4. four
10. four

比如我们需要把上面的我需要把每一行数字后面的"."变成 ")",首字母变成大写

1) One
2) Two
3) Three
4) Four
10) Four

具体实现:

  1. 我们需要先录制一个宏,使用 q,编辑器下方会有一个 q 的标识

我们所有的命令都会存在一个寄存器中,我们需要指定这个寄存器的名字,这里我们以 a 为例,按下 a 后,编辑器底部就会出现正在录制中的状态

  1. 开始写我们的系列命令
  • 将 "." 改成 )
    注意我们一定要规范好我们的光标位置,
    我们先使用一个 H,让光标来到行首(因为如果光标位置不对,可能我们后面的结果都会不对),这时候我们需要开始处理1后面的"."让它改成")",我们可能会想直接让光标向右移动一位,然后修改,但是如果我们的数字有多位的话,那我们移动一位并不会匹配到我们的".",比如10,我们使用 l 移动一位匹配的就是 0,所以我们不能使用 jkhl 来移动位置,我们可以使用 f 来搜索匹配到我们"."的位置,但是因为我们的 f 需要搜索两个字符,我们的"."后面是空格所以我们可以使用 f + . + 回车(回车可以当做空格匹配),然后使用 r 将我们的 "." 改成 ")"

  • 将单词的首字母变成大写
    使用 w 定位到单词的首字母,然后使用 ~,将首字母变成大写

  • 进入下一行
    使用 j 进入下一行

  • 停止录制
    使用 q

  • 查看我们录制的宏的执行命令
    :reg空格a 回车


注意我们查看显示的命令都是我们为改键之前的命令
a 是我们寄存器名称
名称和命令中间空格隔开
我们的 H 就是对应 ^

  • 使用我们的宏
    使用 @a 执行一次我们的宏
    使用 @@ 也是重复执行上一次你的宏的操作
    也可以使用 5@@ 或者 5@a 执行 5次宏

安全机制

当我们的宏执行报错会自己停下来
使用场景:当我们通过数字重复执行我们的宏的时候,我们不需要知道具体要让他执行多少次,可以尽量往大了写,比如我们要查找和修改一个 test,我们当前文件有30个,我们可以让这个宏执行50次,甚至更多,当超过30次的时候就会报错,不再继续执行了

修改宏

追加

qA(这里的A是我们对应寄存器名字的大写,我们之前是小写a,所以这里就写A)

  • 示例:
    我们使用 guiw 将单词转小写,但是我们发现我们忘了按 j 了,我们就可以使用 qA

使用 qA 编辑器下方会再次提示进入记录中的状态,然后按 j,再按q 结束录制

这时候我们的 a 寄存器的命令里就多了一个 j

修改一个已知的宏

本质就是修改寄存器里的内容
1). 将寄存器里的值取出来,粘贴到编辑器里

  • "+寄存器名称+p
  • :put+ 空格 + 寄存器名称 + 回车
    上面两种方式二选一

2). 对我们取出来的命令进行修改
修改完成后使用

  • "ayw
  • "ayy
    上面的两种方式二选一来确认我们的修改

示例

对我们的 guiw 命令进行修改

  1. "ap
    得到
guiw
  1. 将我们的 u 改成 大写
gUiw
  1. 确认修改
    "ayy
  2. 再次查看我们的宏命令
    :reg a
gUiw

问题:在 vscode 里对已知宏的修改不起作用,vscode 里的 vim 有 bug

技巧

  1. 先规范好光标的位置
  2. 移动的时候使用相对位置
  • 比如 w e textObject f t 都可以
  • hjkl 是绝对位置

相关文章

  • jni-01、宏、jni函数详解、数据获取、类型转换、签名规则

    宏语法 宏定义 解决循环拷贝的问题 T2.h 宏的取消 #undef 宏 宏变量 真实开发中:宏都是大写 宏函数...

  • 宏、参数宏、宏嵌套

    简单宏容易理解,如: 带参数的宏以及宏嵌套: 使用BOOTCMD时就像函数一样使用,方便。如上语句BOOTCMD(...

  • 个人对宏定义命名规范的理解

    1.宏定义的命名规范 通用常量宏 私有常量宏 配置类常量宏 通用操作宏 模板宏 方法简写宏 特定类中的步骤简称 其...

  • iOS高效 宏和常量

    记录一些高效的宏 尺寸 打印宏 NSLog 系统宏 颜色宏 其他宏 参考致谢 link

  • 【C/C++】宏(macro)定义与使用

    文章结构如下: 宏的定义 宏的替换与代码展开 宏的替换产生的问题 获取宏参数名称 宏参数的结合 宏的取消 宏定义的...

  • PPT 批量删除所有备注

    添加宏 打开宏窗口 工具 -> 宏 -> 宏 输入宏名称 例如“删除备注” 点击“+” 添加宏代码 保存,关闭窗口...

  • 模板宏

    声明宏 {% macro 宏的名字(参数) %}​内容{% endmacro %} 调用宏 {{ 宏的名字(参数...

  • iOS 宏(1.位置)

    ios 中的宏 1.宏的位置 问题: 宏可以写在哪里? 解答: 1.1 宏+ Build Settings 宏可...

  • 宏和条件编译的结合使用

    宏 宏定义 有参数 无参数 1.无参数的宏 语法: #define 宏名 宏值 #define MM 10 //...

  • C语言预处理指令

    预处理指令 宏定义 宏定义会在预处理的时候, 用宏定义的值来替换宏的名称 格式: #define 宏名称 宏值 应...

网友评论

      本文标题:

      本文链接:https://www.haomeiwen.com/subject/ycxbgrtx.html