3

我有一个像

myFunction (
  myStruct_1_Ptr *var1, /* commenty */
  myStruct_2_Ptr *var2, /* commenty */
  myStruct_3_Ptr *var3, /* commenty */
  int info1,
  int info2,
  int info3,
  int info4
)

比我将所有这些信息移动到一个包装结构中,我想让它看起来像

myFunction (
  myStruct_1_Ptr *var1, /* commenty */
  myStruct_2_Ptr *var2, /* commenty */
  myStruct_3_Ptr *var3, /* commenty */
  myStruct_4_Ptr *var4  /* This is where all infos went in */
)

该函数由类似的语法调用,只需删除前面的语法即可。

myFunction (
  var1, /* commenty */
  var2, /* commenty */
  var3, /* commenty */
  var4  /* This is where all infos went in */
);

我如何通过搜索和替换(或其他任何东西)来做到这一点?我在这里只写了只存在于两个地方的声明部分——在相应的文件.c.h文件中,但我想对我调用函数的所有地方进行类似的处理。赋予函数的变量名称都是相同的。

S&R 的另一种方法可能是跨多个文件对函数的所有实例执行宏,但我不确定如何执行此操作。

4

1 回答 1

8

如果它是一个没有嵌套括号的简单函数调用,那么您可以使用替换命令来执行此操作,如下所示:

:%s/\(myFunction\_s*(\(\_[^,]*,\)\{3}.*\_s*\)\_[^)]*/\1var4\r/

那么你可以使用 跨所有开放缓冲区执行:bufdo此操作,但这确实是特定的,并且带有大量关于没有嵌套括号的警告,没有逗号是注释,我敢肯定还有很多其他情况下它不会正常工作。

关键是\_扩展字符类并.匹配换行符。

于 2012-04-11T18:45:19.313 回答