一直听说vim的宏很强大,但苦于没想到合适的使用场景来使用,直到今天需要给文本中的一串单词加上引号,才想起这似乎可以使用宏来帮我完成繁琐的操作.

20201109113923

在通常情况下,vscode中选中一个单词后按下[ “ ]键,就可以自动在其前后加上引号,那么对于这个需求,就需要用鼠标选出每一个词再按一下引号.这样的操作是非常低效的,需要不停的移动鼠标,划出合适的位置,再按下[ “ ]键,而且[ “ ]键还是需要使用shift的组合按键.

如果使用宏,那么应该可以把添加一个括号的动作录制下来,然后在每一个单词处播放就可以了.效果如下,是不是非常方便呢.

2020-11-09 12.05.05

动图中可以看到我使用的按键,这里再做一下详细解释.

首先将光标放到第一行处,准备从这里开始录制宏.

开始录制宏的vim指令是[ q[a-z] ],a-z每一个字符可以对应于一个不同的宏,这里我们使用[ qa ]指令,把宏录制在a中.

然后就是添加引号的指令了,这里演示的是一种比较入门级的方法,步骤如下

  1. [ I ] 在首个非空字符前插入
  2. [ “ ] 插入引号
  3. [ ESC ] 退出编辑模式
  4. [ e ] 移动到下一个单词末尾
  5. [ a ] 在当前字符后插入
  6. [ “ ] 插入引号
  7. [ ESC ] 退出编辑模式
  8. [ j ] 移动到下一行,为了在一行结束后直接在下一行继续播放宏

输完上述指令后可以看到第一行的引号已经加好了,然后再按下q键结束录制宏即可.

最后终于到了使用宏的时候了.宏的使用指令是[ @[a-z] ],使用[ @a ]可以播放当前录制在a中的宏.由于还有16行待修改,根据vim的语法,在指令前输入数字就可以设置指令的执行次数,所以我们输入“16@a”,直接对后续16行的单词都进行了操作,至此大功告成!

前面使用的添加引号的方式相对比较繁琐,进阶一点的方法是使用vim的surround插件,安装后就可以用[ yiw” ]指令来快速给一个单词添加引号了,这可以等价于之前1-7步的操作.