棋子 · 4 天前

vim进阶01: 修改匹配关键字,让编码更高效

在编写代码过程中,我们有时需要对具有一定规律的代码进行修改,此时采用手动修改,容易出错,效率低;若采用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小鸽

推荐阅读

更多IC设计干货请关注IC设计专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。

推荐阅读
关注数
17687
内容数
1281
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息