Gvim高级替换--对匹配关键字进行操作
在编写代码过程中,我们有时需要对具有一定规律的代码进行修改,此时采用手动修改,容易出错,效率低;若采用gvim替换操作实现能够有效提高工作效率。
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、匹配数字,进行运算,使用运算结果替换
如下所示,假如存在大量需要对数字进行有规律修改的情况时,可以用替换操作实现,
- 使用括号( )匹配关键字;
- 使用submatch(n)调用数字进行加减,其中n代表第几个匹配括号;
- 使用\=将加减运算结果进行替换;
举例如下:
替换前 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) 表示调用第一个括号匹配的字符
使用数字计算结果时,使用\=表示计算结果、