Vim搜索替换:将赋值语句中的位宽标识移至变量名后方
在Vim中调整Verilog总线assign语句的格式
要实现把assign [79:0] ARUSER_COMP = 'h0;这类总线赋值语句改成assign ARUSER_COMP [79:0] = 'h0;,同时保留单比特assign语句(比如assign o_BVALID_COMP = 'h0;)不变,你可以用Vim的正则全局替换功能一步搞定:
核心替换命令
直接在Vim命令行输入以下命令(按回车执行):
:g/assign\s*\[\d\+:\d\+\]/s/\(assign\)\s*\(\[\d\+:\d\+\]\)\s*\(\w\+\)/\1 \3 \2/g
如果想要逐个确认替换(避免误改非目标代码),可以加上c选项(confirm):
:g/assign\s*\[\d\+:\d\+\]/s/\(assign\)\s*\(\[\d\+:\d\+\]\)\s*\(\w\+\)/\1 \3 \2/gc
命令逻辑拆解
咱们把这个命令拆解开,方便你理解和灵活调整:
:g/匹配模式/:只对包含assign+任意空格+[数字:数字]的行执行替换,这样单比特的assign语句完全不会被选中,确保只修改总线赋值语句。- 正则分组捕获:
\(assign\):捕获第一个分组,就是assign关键字本身\s*:匹配任意数量的空格(包括0个,适配代码里不同的空格缩进风格)\(\[\d\+:\d\+\]\):捕获第二个分组,就是总线位宽范围,比如[79:0]\(\w\+\):捕获第三个分组,就是总线信号名,比如ARUSER_COMP
- 替换规则:
\1 \3 \2把三个捕获的内容重新排序——先放assign,再放信号名,最后放位宽范围,中间用空格分隔,完美转换成你想要的格式。
适配特殊场景的扩展
如果你的代码里位宽范围有带下划线的数字(比如[7_9:0]),可以把正则里的\d\+改成[\d_]\+,适配这种写法:
:g/assign\s*\[[\d_]\+:[\d_]\+\]/s/\(assign\)\s*\(\[[\d_]\+:[\d_]\+\]\)\s*\(\w\+\)/\1 \3 \2/g
内容的提问来源于stack exchange,提问作者VaiRaiChu
相关产品推荐
相关产品推荐

