vim 作为最出色的文本编辑器之一,有着丰富的内置命令和各色各样的开源插件,可以说是杀鸡屠龙无所不能。 但同时 vim 的入门门槛高、学习曲线陡峭,也使得许多人或是望而生畏,或是浅尝辄止。当然也包括我,我在本科阶段第一次接触 vim 的时候,多半是带着一些“装x”的中二情感在强行用,直到最近才开始系统地学习、使用。目前使用的模式是在 VSCode 中激活 vim 键映射,虽然有很多大牛选择从零将 vim 打造成完整的 IDE,但我始终认为 vim 的强处在于文本处理,IDE 部分还是交给 VSCode 吧。
回到正题,我的主要开发语言是 Verilog,在 Verilog 代码中经常会出现一整段十分相似的代码,一般是只有数字编号不同的内容。例如在对一整组信号做打拍时,这种时候可以应用 vim 的宏功能来快速生成代码。
// s0-s15 打一拍
always @(posedge clk)
begin
s0_d1 <= s0;
s1_d1 <= s1;
s2_d1 <= s2;
s3_d1 <= s3;
s4_d1 <= s4;
s5_d1 <= s5;
s6_d1 <= s6;
s7_d1 <= s7;
s8_d1 <= s8;
s9_d1 <= s9;
s10_d1 <= s10;
s11_d1 <= s11;
s12_d1 <= s12;
s13_d1 <= s13;
s14_d1 <= s14;
s15_d1 <= s15;
end
预备知识
vim 宏
vim 处于 normal 模式时,按 q 1 将进入宏录制模式,vim 会录制此后所有操作到宏 1
中。当然 1 键可以任意替换,相应的宏也会录制到对应的键中。录制过程中再次按 q 将结束录制,此后可通过 @ 1 的方式执行录制的内容。和 vim 中其他命令一样,可以在其前加上任意数字 n 表示重复执行 n 次。
vim 数字自增功能
这大概是个比较冷门的功能,很少看见有人提到,但却意外地挺有用。
normal 模式下,Ctrl+a 将从当前光标处往后查找第一个数字,并且将其 +1。类似地,Ctrl+x 实现查找、-1 的功能。
生成相似代码段
应用上述两个 vim 功能,即可很方便地生成前言中一组信号打拍的代码块。基本思路是写好第一行之后:复制当前行 → 粘贴 → 找到数字自增,重复这三个操作。因此录制并重复执行的内容就是上述 3 步,具体实现过程如下。
小结
- vim 宏录制
- vim 中的数字自增 / 自减
- 找到代码中的规律,使其自动生成
最后,感谢你阅读文章。