使用 VIM 搜索和替换重写 C 宏代码



我有一个文件使用过时的宏来读取 32 位整数,

READ32(dest, src)

我需要将所有呼叫替换为

dest = readUint32(&src);

我正在尝试编写一个 SED 风格的 Vim 搜索和替换命令,但没有运气。

我可以使用READ32([a-z]+, cmd)使用/搜索提示来匹配第一部分,但它似乎在:s语法中不匹配。

这是我最终想通的工作方法:

:%s/READ32((a+),(a+)/1 = readUint32(&2);

诀窍是将要存储在 1 2中的值包装在 () 中 另一个技巧是你必须转义&运算符,因为 &in vim 替换是"整个匹配"。

编辑:随着我的改进,进一步改进:
:%s/READ32((w+),s*(w+)/1 = readUint32(&2);

a更改为w,因为我有带有 _ 的变量。
添加了 \s* 以处理 和第二个变量之间的空格问题。
现在只是尝试处理样式类.变量.子变量的c ++样式变量

编辑2:将w替换为[a-zA-Z0-9_.],以捕获变量的所有命名方式。

这应该做你想要的,或者至少让你开始:

%s-READ32(s*(i+)s*,s*(i+)s*)-1 = readUint32(&2);-g

我会再次使用宏样式:按*以"突出显示"搜索READ32

现在,我们将录制一个宏(q..):

  • n
                 (移至下一场比赛

  • c w readUint32 Esc
                 (更改函数名称

  • w
  • w dt
                 (删除第一个参数

  • "_dw
                 (删除多余的,

  • bbPa = Esc
                 (readUint32之前插入附加=的结果变量

  • ;
                 (;附加到行尾

现在您可以重复宏(1000@q)。

最新更新