在编写代码过程中,我们有时需要对具有一定规律的代码进行修改,此时采用手动修改,容易出错,效率低;若采用vim替换操作实现能够有效提高工作效率。
1、匹配字符串,进行修改替换
如下所示,假如有50个类似的信号,需要在信号名后面,添加_nc,该如何使用gvim替换操作实现。
举例如下:替换前 替换后
wire [1:0] ppu_parity ;
wire [1:0] ppu_ecc ;
wire [1:0] ppu_parity_nc ;
wire [1:0] ppu_ecc_nc ;
使用命令:
如果需要替换的信号分布在文件中的各个位置,则使用全局符号 %
: % s/(\w+)\s * ;/\1_nc;/gc
如果需要替换的信号集中在文件中的110行到200行,则使用范围:110,200
: 110,200 s/(\w+)\s * ;/\1_nc;/gc
S/aaa/bbb/gc 表示用bbb替换aaa,g表示将一行中出现的所有aaa都用bbb替换
c表示替换前会进行确认,输入y表示替换,输入n表示不替换。
(xxx)表示匹配关键词xxx,括号中的内容可以用\1表示,如果匹配选项有两个括号,则依次用\1和\2表示匹配内容。
2、匹配数字,进行运算,使用运算结果替换
如下所示,假如存在大量需要对数字进行有规律修改的情况时,可以用替换操作实现,
1)使用括号()匹配关键字;
2)使用submatch(n)调用数字进行加减,其中n代表第几个匹配括号;
3)使用\=将加减运算结果进行替换;
举例如下:
替换前
assign mac_dat0= { data_in [39:32], data_in[47:40], data_in[55:48], data_in[63:56] };
替换后
assign mac_dat0= { data_in [71:64], data_in[79:72], data_in[87:80], data_in[95:88] };
使用命令:
: % s/ (\d\d)/\=(submatch(1)+32)/gc
(\d\d)表示匹配2个连续数字, submatch(1) 表示调用第一个括号匹配的字符
使用数字计算结果时,使用=表示计算结果
作者:IC小鸽
文章来源:IC小鸽
推荐阅读
- 几种自动生成verilog代码的方法
- PCIe学习(二)
- 高性能CPU微架构应该具有哪些特性?
- 讲个SystemVerilog disable语句的坑
- PCIe链路初始化和训练:FTS (Fast Training Sequence)
更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。