老板说,Vim宏都不会用,你的工作效率太低啦~
良许Linux 人气:0
工作中,对于文本文件的编辑我们经常有这样的需求:
- 多次重复输入一段相同文本;
- 生成一段序列化的文本;
- 每行文本插入一句相同的文本。
除此之外,还有很多需要重复操作的动作。对于这些需求,如果我们人工去操作的话,肯定是非常枯燥乏味,并且要浪费很多时间精力。
这时, Vim 宏就派上用场了,它可以通过一些简单的步骤快速完成这些重复性的操作,省时省力!下面详细讲解。
#### 宏的录制和运行
**宏的录制**
1. 在 Vim 编辑器中创建新文件或打开现有文件;
2. 按 `q` 并跟上 `宏名` 开始录制。假设我们想要将宏名命名为 `b` ,则按 `Esc` 和 `qb` 开始录制;
3. 文本编辑ing……
4. 按 `q` 停止录制。至此,宏的录制已完成。
**宏的运行**
按 `@` 接 `宏名` 即可运行宏一次,按 `次数` 接 `@宏名` 重复运行宏多次。
下面给出实例来详细介绍。
#### 示例-1:使用宏多次生成相同的文本
例如我们要生成 100 行一样的文字,一种比较笨的办法就是复制然后粘贴所需要的遍数。这种效率非常低,而且非常容易出错。有了宏这个工具,一切变得超级简单!
首先,我们在 Vim 编辑器中创建一个名为 `file1.txt` 的新文件。
![file](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101328038-2014297418.jpg)
然后,我们按 `q` 之后再按 `z` 开始录制宏。这里的 `z` 就是 `宏名` ,后面会用到。如果录制正确,底部就会出现 `recording @z` 字样。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101329280-524990094.jpg)
再之后,按 `i` 然后输入要需要重复的文本。比如这里输入文本 `Learning Vim Macros` 。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101330536-500314282.jpg)
最后按 `q` 停止录制,这时 `recording @z` 就会从底部消失。这样,一个名为 `z` 的 宏就录制完成了,后续我们就可以利用这个宏来重复完成文字录入工作。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101330701-1117126254.jpg)
如果你想运行一次刚刚创建的宏,那么将光标移动到文件的所需位置,然后并按 `@z` 就可以了,这时文字就会被复制一遍。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101330927-107793373.jpg)
如果你想要复制 N 多次这行文字,则可以多次运行刚刚那个宏。此时只需在宏前面加 `次数` 即可。例如 `4@z` 就可以运行刚才的宏 4 次,相应文字就会被复制 4 遍。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101331105-432440456.jpg)
#### 示例-2:使用宏生成序列号
在示例-1里我们是机械重复复制一堆一样的文字,那如果想要生成带序列的文本该如何处理?使用宏也可以轻松完成!
假设我们要生成 `101-110` 的一系列数字,我们一起来完成这个需求。
首先,在 Vim 编辑器中创建一个名为 `file2.txt` 的新文件,接着按 `i` 键入 `101.`。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101331314-2023174615.jpg)
按 `ESC` 退出键入。然后再按 `qy` 以宏名称 `y` 开始录制后续的操作。我们将光标移到第一行的开头并按 `yy` 复制文本,然后按 `p` 将文本粘贴到下一行。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101331968-456396253.jpg)
接着,按 `Ctrl + a` 将第二行的值从 `101` 增加到 `102` 。最后,像之前一样按 `q` 停止录制,我们的宏就制作完成了。
**接下来,就是见证奇迹的时刻!**
我们键入 `8@y` ,刚刚所录制的宏就会运行 8 次,生成从 `103` 到 `110` 的连续数字。一键操作,简单高效!
这对于一些带有序列性的文本非常有用,你就无需再重复去做 复制-->改数字 这样重复枯燥的工作,同时效率也会大大提升!
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101332176-1085919111.jpg)
#### 示例-3:在文件的每一行中添加相同的文本
我们在操作数据库的时候,很多情况下一些语句非常相似,比如 `insert into items values(100, 20077100050, alvin)` 这样的文本,会重复很多次。假如我们现在已经有了要插入的数据,如何快速生成多条 SQL 语句?
在这个例子里,我们假设数据文件 `file3.txt` 有 4 条数据,如下图示。
首先,我们在 Vim 编辑器中打开数据文件 `file3.txt` ,然后按 `ESC` ,再然后按 `qd` 以宏名 `d` 开始录制。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101332368-1403149023.jpg)
将光标转到文件的开头,按 `i` 键插入文本。然后再输入 `insert into items values(` ,再接着按 `ESC`, `w`, `yw` 5 次。
在这里,`w` 用于转到下一个单词,`yw` 用于复制当前单词。之所以这里要 5 次是因为这里每行有五部分。分别是 `11001` `,` `HDD` `,` `Samsung` (注意逗号也算一部分)。
之后,按 `ESC` 和 `a` 键将光标移动到行尾,再输入 `);` 。
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101332575-1198119713.jpg)
最后,按 `j` 然后按 `q` 。这里,`j` 用于移动到下一行,`q` 用于停止录制。这样我们所需要的宏就制作完成了。
现在,我们想要让下面剩下的 3 行的文本都处理成第一行那样的格式,直接按 `3@d` 运行宏 3 次就可以实现。这样一来,在数据库中进行插入就会方便很多,而且我们无需手动一个个去更改,简单高效!
![](https://img2020.cnblogs.com/other/1218435/202004/1218435-20200401101332800-1588678698.jpg)
#### 结论
我们在写代码过程中,有很多场合文本、代码高度相似,如果我们手动去一个个修改的话,那效率将会非常低。有了 Vim 下宏这个神器,我们可以通过创建和使用不同类型的宏来完成这些重复性工作,从而节省时间和精力,实现高效编辑。
#### 看完的都是真爱,点个赞再走呗?您的「三连」就是良许持续创作的最大动力!
1. 关注**原创**公众号「**良许Linux**」,第一时间获取最新Linux干货!
2. 公众号后台回复【资料】【面试】【简历】获取精选一线大厂面试、自我提升、简历等资料。
3. 关注我的博客:[lxlinux.net](http://www.lxlinux.net)
加载全部内容