作用
可以录制一系列动作
开始录制
qa
a 是寄存器的名称,也可以是其他任意字母
结束录制
q
查看录制好的宏
:reg+空格+a+回车
使用
-
直接使用
@a
a 是寄存器的名字 -
调用最后一次执行的宏
@@
对于需要连续调用的宏来说,这个命令十分有用 -
重复执行
数字 + @ + 寄存器名称
比如:10@a -> 执行 a 这个宏10 次
示例
1. one
2. two
3. three
4. four
10. four
比如我们需要把上面的我需要把每一行数字后面的"."变成 ")",首字母变成大写
1) One
2) Two
3) Three
4) Four
10) Four
具体实现:
- 我们需要先录制一个宏,使用 q,编辑器下方会有一个 q 的标识
我们所有的命令都会存在一个寄存器中,我们需要指定这个寄存器的名字,这里我们以 a 为例,按下 a 后,编辑器底部就会出现正在录制中的状态
- 开始写我们的系列命令
-
将 "." 改成 )
注意我们一定要规范好我们的光标位置,
我们先使用一个 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 命令进行修改
- "ap
得到
guiw
- 将我们的 u 改成 大写
gUiw
- 确认修改
"ayy - 再次查看我们的宏命令
:reg a
gUiw
问题:在 vscode 里对已知宏的修改不起作用,vscode 里的 vim 有 bug
技巧
- 先规范好光标的位置
- 移动的时候使用相对位置
- 比如 w e textObject f t 都可以
- hjkl 是绝对位置
网友评论