目录
- 1.寄存器
- 1.1.寄存器相关命令
- 2.宏
- 2.1.宏的录制和回放
- 2.1.1.避免宏回放回到开头重做
- 2.1.2.先搜索
- 2.2.宏的编辑
- 2.2.1.特殊字符
- 3.递归的宏
- 4.跨文件运行宏
1.寄存器
寄存器 | 说明 | 注释 |
---|---|---|
a-z | 手动复制数据 | "+寄存器 |
" | 无名寄存器 | ""p等效为p |
0-9 | 最后10次删除操作的历史记录 | |
% | 存储当前文件名 | 只读存储器 |
# | 上次打开的文件名 | 只读存储器 |
. | 最后插入的文本 | 只读存储器 |
: | 最后执行的命令 | 只读存储器 |
* | 系统的主粘贴板(Linux中为终端的鼠标选择内容) | 不起作用 |
+ | 粘贴板选择器(Clipboard selection),用于ctrl+c和ctrl+v | 不起作用 |
1.1.寄存器相关命令
命令 | 说明 | 注释 |
---|---|---|
" | 访问寄存器 | |
ctrl+r | 允许在插入模式或命令行模式下粘贴某个寄存器的内容 | |
:reg[isters] a b | 查看寄存器a和b的内容 | |
:reg[isters] | 列出所有寄存器的内容 | |
A-Z | 附加寄存器内容 |
2.宏
2.1.宏的录制和回放
命令 | 说明 | 注释 |
---|---|---|
q a | 进入宏录制模式,后面接寄存器 | 状态栏显示recording @a |
q | 再次按q录制完成 | |
@ a | 回放宏 | |
@@ | 回放最后一次运行的宏 | |
3@a | 多次回放宏 |
#光标移动到文件开头
gg
#使用寄存器a进入宏录制模式
#之后移动和编辑都会在宏模式下记录起来
qa
#搜索"animal.act"
/animal.act
#光标移动到target上
4w
#将target删除,存储到寄存器b中
"bdw
#删除后面的,和空格
xx
#跳转到字符串末尾
f'
#添加,和空格
a,<space><ESC>
#粘贴寄存器b
"bp
#录制完成
q
#回放宏
@a
2.1.1.避免宏回放回到开头重做
- 宏执行错误会停下来
- 默认搜索不到光标会回到开头
- 让搜索到末尾产生错误
:set nowrapscan
2.1.2.先搜索
在录制宏之前先搜索,录制宏后,先跳转到需要的位置,经过确认后再运行回放
@a
@@
2.2.宏的编辑
和寄存器操作相同
#查看每个寄存器内容
:reg
#查看寄存器内容
:echo @a
#打开一个新缓冲区
:new
#将寄存器的内容粘贴出来
"ap
#编辑
#复制到原来的寄存器
_"ay$
2.2.1.特殊字符
在哪里找到参考
字符 | 说明 | 注释 |
---|---|---|
^[ | ESC键 | |
^M | enter键 |
3.递归的宏
#1.首先确保宏是空的
qaq
#2.按照正常方式录制宏
#3.在录制过程中调用@a
例子
#1.光标位于'bark'
#2.寄存器清空,然后进入宏录制
qbqqb
#3.将'内容存于寄存器c
"cdi'
#4.移动到'dog'
W
#5.dog保存到默认寄存器中
di'
#6.光标左移一个字符
h或b
#7.插入bark
"cp
#8.光标移到行首
_
#9.默认寄存器插入
p
#10.将光标移到下一行首
j_
#11.重新执行宏
#但什么也不会发生,因为寄存器是空的
@b
#12.完成录制
q
#13.递归回放
@b
"cdi'Wdi'h"cp_pj_@b
#对已有的宏附加递归
qB@bq
4.跨文件运行宏
:arg **/*.py
#参数列表用:normal命令执行正常模式下的命令
:argdo execute ":normal @a" | update