平常开发过程中我们会有处理文本的需求,比如后端就要根据excel生成sql语句,运维需要处理各种日志转化成特定的格式。这些本质上都是批量处理文本内容。一般情况下我们会编写php,go,shell等脚本或者用awk这样的命令去处理。这里介绍下vim的宏录制功能 非常适合处理这样的情况。
vim宏的适应分为录制和回放两个操作
录制操作以q{register}开始, q表示开启/关闭宏录制,{register}表自定义的寄存器,用来存储批量操作命令。录制完成后用q关闭宏录制
宏的回放。录制完宏操作之后,选择需要变动的文本内容。输入:normal @{register}来进行回放。
实际操作
下图excel的字段,以扩展属性为条件 去更新手机号
setp1 筛选无效数据后 复制A,B两列的内容
step2 终端下新建demo.sql 并将粘贴内容复制到文件下(使用 "+p粘贴会更快 且没有代码格式问题不会自动换行异常)生成一下数据
step3 开启宏录制 qe 然后一次输入Iupdate user set phone='ea where id=A; 以上就是这次宏录制的全部内容 最后输入 q完成宏录制
Ivim命令表示在行首进行编辑(插入)模式
update user set phone='输入修改内容
ea电脑Esc按键退出编辑(插入)模式。e表示光标移动到下一个单词尾部,a表示在当前光标后进入编辑(插入模式)
where id=输入修改内容
A;推出编辑(插入)模式,A在行尾进入编辑(插入模式),输入;mysql语句的结束符,退出编辑模式
step4 jVG选中其他所有文本内容 输入:normal @e即可对所有剩余内容完成或放
就能完成了一次 vim宏操作。比起写脚本相对比较简单。不过需要注意的是vim有插件的命令是不支持宏操作的,并且对文件有格式检测。就像上面的sql文件 建议改成demo.txt处理完后在重命名成 demo.sql 。
还有一种简单的批量操作,如果上面的操作 忘记输入最后的分号只需输入ggVG选中全部内容:normal A;行尾补全分号