vim recording
大家是否有这种经验,“不知道为什么按出recording状态,按ESC貌似无法直接退掉”的情况,个人已经有过好几次了。
与其出来烦人还不如了解它,昨天我就花了点时间学习recording。怎么说,还是有点用的。
首先说明的是recording是怎么按出来的:命令模式下按q。假如你想按退出的:q,右手有点慢的话就有可能出现recording。顺便说一句,q:出来的是command history,command history状态下:q或者enter都可以退出。
那么recording是干啥的?简单来说就是命令序列,加快工作效率的。基本使用是q开启录制,接着选择寄存器,比如1,2,a之类的。之后的到第一个q为止的命令都会加入序列中。录制完成之后@1(1这里为寄存器的名字,你也可以选择其他寄存器)就可以重复寄存器中的命令序列。举个简单的例子:
1
|
1.
|
你需要复制1. 20行,除了Vyo20p(选中行复制,进入下一行,粘帖20次)之外,你可以q1Vyopq录制命令序列,20@1执行20次。
这个例子可能还不能体现recording的好处,接下来举第二个例子,注释10行代码
1
2
3
4
5
6
7
8
9
10
|
// int a = 1;
int b = 1;
int c = 1;
int d = 1;
int e = 1;
int f = 1;
int g = 1;
int h = 1;
int i = 1;
int j = 1;
|
录制序列q2I// jq,//后面的是空格。9@2执行剩下九次。接下来一个例子和SQL有关。
1
2
3
|
INSERT INTO USER(name) VALUES("foo");
bar
baz
|
你需要像第一行一样组装一个SQL。使用recording,我的操作序列为q3I,输入INSERT INTO USER(name) VALUES(“,按ESC,$a,输入”);,按ESC,按jq,录制结束。接下来按@3应用到下一条。
至此是不是觉得recording用得好的话还是听不错的?补充一下recording相关的一些信息。
@@是执行上一次的命令序列,:reg显示所有的寄存器,:reg 1显示寄存器1中的内容。
写一个自己的例子:
首先递加一组数:
1 2 3 4 5 6 7 8 9
输入"q,1,ctrl+A,j,shift+^,q,10,@,1"(','号表示分开输入,不是实际输入)
变为:
2 3 4 5 6 7 8 9 10
继续记录:
a=1+a,自动生成,a=2+a, a=3+a, a=4+a......
继续记录:
1,然后自动生成2到1000.
这些都可以用recording来实现,我就不记录了