宏可以是一组键盘操作的记录,我们可以反复播放这个宏来达到重复操作的目的,这样可以减少重复性的劳动。我们用 <F3>
绑定开始录制宏,用 <F4>
绑定宏的结束(在开始录制后是结束)和重播(在结束录制后是重播)。
这是一个非常方便的功能,比如我们希望打印 3 行 ***
, 我们就可以进行如下输入 <F3>, *, *, *, <RET>, <F4>
之后再按 2 次 <F4>
就可以来。
当然更方便的操作是结合 C-u <num>
, 这样可以指定重复的次数。
我们不只可以进行静态的宏的录制,在宏中我们还可以插入 counter, 这是一个非常有用的计数器,每个宏对应一个 counter, 它会在每次插入时递增 +1 (初始值为 0)。而且更加方便的是,我们可以在进行宏录制的时候按 F3
插入 counter 。比如说如果希望打印 x0x1x2x3
, 可以按 <F3>, x, <F3>, <F4>
来完成录制,然后就可以重复播放 3 次就可以完成任务。
当然这种只能让 counter 按照递增的方式进行,我们可以用 kmacro-set-counter
来设置寄存器的初始值,这样就可以完成打印 x6x7x8
这种不从 0 开始的递增任务来,同时我们也可以在打印完 x6x7x8
后再次打印 x2x3x4
。这个函数我建议绑定在 <F2>
上
此外,有的时候我们需要保持 counter 并不增长,比如说这种情况:
assign x0 = x[0];
assign x1 = x[1];
assign x2 = x[2];
assign x3 = x[3];
我们希望打印出两个相同的 counter, 此时可以在第 2 个 counter 的位置输入 C-u <F3>
而不是 <F3>
即可解决。更进一步,对于 C-u <num> <F3>
表示在执行完此次插入寄存器后(注意这里说的是插入后),增加一个 <num>
的值,这样适合解决不连续递增的问题。
上面的这个过程也被称为 kmacro-add-counter
,也就是递增寄存器的值。并不需要绑定特殊的快捷键,因为反正也可以用原有快捷键。
键盘宏也会被存在一个 ring 结构中,也就是说,可以管理来检索多个键盘宏。按理说应该是 C-x C-k
为前缀键管理键盘宏的所有快捷键,但是因为我的快捷键绑定本身的问题,所以导致无法使用这个键盘宏,于是不再讨论。
symbol-overlay 我一直当它是一个阅读代码的工具,不过我发现当我 overlay 来一个符号后,快捷键会发生一个变化,当我的光标在 overlay 上时,可以直接按 n, p, <, >
在符号间进行跳转,按 d
可以跳转到定义处,按 r
可以进行重命名,按 q
可以逐个替换,按 w
可以对符号名进行保存。