vim宏操作

vim宏操作

vim宏操作和多光标插件

建议看完本文的相关文字说明后 仔细看一下文末的demo和gif演示图

宏操作是vim中一个可以 录制并调用 按键组合的一个操作
可有效的减少重复操作

可通过 :h q 查看帮助手册

宏 - 重复组合操作 - complex-repeat

开始录制宏

帮助:

1
2
3
4
5
6
7
q{0-9a-zA-Z"}
在寄存器 {0-9a-zA-Z"} 里记录键入的字符 (大写名字的寄存
器表示附加键入的内容)。'q' 命令不能在执行寄存器时使
用。同样,在映射和 |:normal| 里也不能。

注意: 如果用作记录的寄存器用于 y 和 p,其结果多数不如
你的预想,因为 p 会粘贴记录的宏,而 y 会覆盖记录的宏。

normal模式下,使用 q+指定寄存器开始录制宏, 只选的寄存器有 数字和大小写字母寄存器

例如 qai12345<cr><esc> 即指定寄存器a,录制了动作 进入插入模式 插入12345 回车换行 退出插入模式 的宏操作

结束录制宏

帮助:

1
2
q			停止记录。(注意 实现细节: 停止记录的 'q' 不会被保存在
寄存器里,除非它是映射的结果)

在vim录制宏的过程下,normal模式下使用q结束录制

接上 #开始录制宏 这部分的操作 开始录制到结束录制的完整键入为 qai12345<cr><esc>q

调用录制完成的宏

帮助:

1
2
3
4
5
6
@{0-9a-z".=*+}
执行寄存器 {0-9a-z".=*+} 的内容 [count] 次。 注意 不能
用寄存器 '%' (当前文件名) 和 '#' (轮换文件名)。
寄存器的执行方式与映射类同,也就是说,'wildchar' 和
'wildcharm' 的差异适用此处,而撤销的同步可能有所不同。
"@=" 则会提示你输入一个表达式。这个表达式的结果会被执行。

normal模式下,使用 @+指定寄存器名称 调用对应寄存器上的宏。

例如本文前面于a寄存器上录制了宏 调用时只需要 @a 即可

PS: 特殊的调用形式 @@可调用最近调用过的宏 即@a后,可用@@调用a寄存器的宏

DEMO

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 现有一个如下文档 需要将其由上面的置为下面的结果

string aa = ""
string bbb = ""
double cccc = 10.0
float eee = 1.0
float ffff = 1.0

TO

string key1 = "";
string key2 = "";
double key3 = 10.0;
float key4 = 1.0;
float key5 = 1.0;

需要做的改动共有两处 1: 将key重命名为key12345, 2: 为每行行尾添加上 ; 符号

实现(其实位置在第一行 第一列):

  1. 先复制一个 key0
  2. 录制一个宏 qq w viwp <ctrl+a> yiw A; <esc>j^ q
    1. qq 指定q寄存器开始录制宏
    2. w 跳转到下一个单词开头 即跳到aa处
    3. viwp 选中 aa 并且用p将 aa 替换为 key0
    4. <ctrl+a> 将 key0 自增为 key1
    5. yiw 将 key1 复制到剪切板
    6. A; 跳到行尾插入;
    7. j^ 退出插入模式并到下一行且回到行首
    8. q 结束本次录制
  3. 调用4次宏 4@q

实现的要点在于每次的开始状态、结束状态要保持一致 例如上述

GIF演示

演示


vim宏操作
https://yaocc.cc/vimmacro/
作者
Yaocan Chen
发布于
2022年6月16日
许可协议