前言

在 vim 中录制宏的意思就是把一段操作录制下来,然后可以重复执行。打个比方,我有一个文本,一共 50000 行,我要在每一行后面加一个英文句号。这个操作如果手动做的话效率非常低。这时候我可以这样,在每一行后面加一个英文句号,然后让 vim 自动重复执行这个操作,这是非常有规律的。

要在一行后面加英文句号的操作有两种主要方法

第一种,在 normal 模式下,执行:

$a.

操作演示:

第二种,在 normal 模式下,执行:

A.

操作演示:

宏的详细操作

我们在使用 vim 的时候,有时候一不小心在 normal 模式下按到 q ,然后再按一个键(比如 t)的时候左下角会出现一个 recording @t,这其实就开启了宏录制,你接下来的 vim 内操作全部都会被记录,直到你再次按下 q 的时候,宏就录制完成了,我们暂且称之为:宏存储在 t 寄存器中,你想使用那一段宏的时候,只需要按下 @t 就可以了,如果你要循环 100 次数,就执行 100@t,如果想使用其他的键(比如 abcd)也是可以的。

接下来是操作演示,我这里已经写了一个 50000 行的文本文件,我现在要使用宏在每一行的后面加上一个英文句号:

操作分解:

第一步

vim test

用 vim 打开一个名为 test 的文件,它里面已经有 50000 行内容了

第二步

我在文件的顶部加了一个空行,这样子做是因为我想要循环执行在每一行后面加句号这个动作,那我得一行行衔接下去,所以我把光标一开始定位在那个空行里面,这样我的第一个动作就是要到下一行,这样我就可以循环往下执行了

第三步

qt

打开宏录制,我用的还是 t ,打开录制之后,左下角出现了 recording @t 的字样,说明已经开始录制了。然后我就先到下一行,然后在末尾加了一个句号,最后再次按下 q 键,录制完毕,这样我的宏就做好了,t 寄存器里面保存的操作就是:

下一行 -> 光标定位到行尾 -> 进入 insert 模式 -> 输入句号 -> ESC

翻译成 vim 的操作就是:

j$a.

jA.

第四步

现在就可以调用了,我调用了三次

10@t

100@t

1000@t

我先循环调用 10 次宏,来试一下录制的对不对,发现录制正确之后,再调用了 100 次,也是完全正确的,最后我调用了 1000 次,执行有点慢,cpu 被吃了很多,但还是正确执行了。其实我们可以在宏的录制中给 10 行加句号,这样调用 1000 次会快一点,我这里只是演示而已,就不去折腾了。


我的公众号

名字:曼妮小代码
微信号:MannyCoder
二维码:

vim 录制宏,自动循环执行组合操作的更多相关文章

  1. shell 之 循环执行某操作

    需求: 按月执行201904到202010的py脚本. 代码如下: #!/bin/bash i=201904 # 定义开始月份 while [ $i -le 202010 ] # 当i小于等于2020 ...

  2. hibernate for循环执行添加操作出错问题

    操作数据库使用hibernate框架 hibernate插入对象的时候,对于id唯一,数据库设置为自增的时候执行完操作后会将id赋予该对象 再次插入就会出现问题. 由于session缓存,得再研究下.

  3. java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql mybatis 循环执行update生效一次 实际只执行一次

    java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说提交成功了一次,并没有实际的个数循环 有可能是同一个对象导致的 可以仔细看一下下面两段代码有什么区别 p ...

  4. 转:"为自动填充列调整大小期间不能执行此操作"解决办法 .

    转载自:http://blog.csdn.net/zhxingway/article/details/5384690 今天在测试的时候,打开一个窗口突然发现出现以下错误,就算我在打开窗口那个按钮里面和 ...

  5. 自动监控tomcat脚本并且执行重启操作

    #!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # author:reed # date:// # 定义环境变量 MYPATH=/usr/local/jdk/bin exp ...

  6. 【vim】插入模式与常用编辑操作

    vim不像很多编辑器那样一启动便可以直接编辑文本,需要在普通模式按下i, a等键才会进入插入模式进行文本编辑. 如何进入插入模式 以下的命令都会让vim从普通模式切换到插入模式,但命令执行后的字符插入 ...

  7. ASP.NET服务器端执行耗时操作的工作记录

    公司之前有这样一个业务需求: 一名同事做出文件a0和b0,然后将a0加密为a1.b0加密为b1:再将文件a0.a1.b0和b1上传至服务器M:同时要将服务器N上的数据表添加一条记录,该记录的ID就是前 ...

  8. 在 Visio 中录制宏

    在“开发工具”选项卡上,单击“录制宏”.(如果您看不到“开发工具”选项卡,请参阅下面的“显示‘开发工具’选项卡”.) 在“宏名”框中,键入宏名称. 在“快捷键”框中,键入与 Ctrl 键一起使用可运行 ...

  9. C# 集合已修改 可能无法执行枚举操作 zz

    今天编写程序时 修改了list集合 在foreach时报 “集合已修改:可能无法执行枚举操作.”错误. 首先想到的是没有锁定集合对象. 增加了 private readonly object sync ...

随机推荐

  1. 关于用phonegap 3.0+ 打包后sencha touch按钮点击切换动画延迟接近一秒的以及界面闪烁的解决方案

    android的webview对硬件加速的支持貌似很不理想,在开启硬件加速的情况下,css3这些需要调用硬件加速的样式会大幅拖慢html5的webapp,在htc的部分手机上还会因开启硬件加速而导致闪 ...

  2. Suricata开源IDS安装与配置

    开源IDS Suricata安装 Linux下的依赖问题的解决 在Debian,Ubuntu或者Linux Mint系列 $ sudo apt-get install wget build-essen ...

  3. my sql 两个 索引 时的 union 与 or 的比较

    背景:用一个表中的父子级关系进行查询 优化的过程中 发现可以使用 or 来代替 union all union all 需要查询两次 表 而 使用 or只需要 查询 一次 并且 两个字段都建立了索引 ...

  4. 如何设置Eclipse工作区默认编辑宽度

    1)打开Window  => Preferences窗口 2)打开Formatter属性页从Java => CodeStyle => Formatter 3) 单击New创建一个自己 ...

  5. 日志记录---log4j详解

    Apache官方项目地址 通常的日志记录的缺点是会减慢程序的运行速度,如果用普通的System.out的话影响视觉效果,另外解耦度也不好,而log4j的设计则使得日志记录变得可靠快速和可拓展性好. l ...

  6. 问答项目---用户注册的那些事儿(JS验证)

    做注册的时候,由于每一个页面都有都要可以注册,可以把注册方法写到一个公用的方法里去,其他方法继承这个方法: 简单注册JS示例: <script type='text/javascript'> ...

  7. postgresql----TEMPORARY TABLE和UNLOGGED TABLE

    一.TEMPORARY|TEMP TABLE 会话级或事务级的临时表,临时表在会话结束或事物结束自动删除,任何在临时表上创建的索引也会被自动删除.除非用模式修饰的名字引用,否则现有的同名永久表在临时表 ...

  8. mysql 数据操作 单表查询 group by 练习

    小练习: 1. 查询岗位名以及岗位包含的所有员工名字 mysql> select post,group_concat(name) from employee group by post ; +- ...

  9. node-schedule 实现定时任务使用方法记录

    在项目中有个每天0点执行的函数,本来想用setInterval来实现,但觉得这种需求以后应该还会有,自己写可能拓展性不高.搜了一下发现了node-schedule这个包.现在记录一下使用方法 node ...

  10. 【开发者笔记】利用shp2pgsql将shape文件导入到postgresql中

    导入shp文件到postgresql中 1.首先,你需要让shp2pgsql命令可用,百度下载,加入环境变量即可. 下载地址:https://download.osgeo.org/postgis/wi ...