You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

命令逻辑拆解

咱们把这个命令拆解开,方便你理解和灵活调整:

  1. :g/匹配模式/:只对包含assign+任意空格+[数字:数字]的行执行替换,这样单比特的assign语句完全不会被选中,确保只修改总线赋值语句。
  2. 正则分组捕获:
    • \(assign\):捕获第一个分组,就是assign关键字本身
    • \s*:匹配任意数量的空格(包括0个,适配代码里不同的空格缩进风格)
    • \(\[\d\+:\d\+\]\):捕获第二个分组,就是总线位宽范围,比如[79:0]
    • \(\w\+\):捕获第三个分组,就是总线信号名,比如ARUSER_COMP
  3. 替换规则:\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:22:38