我有一个像
这样的功能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的另一种方法可能是在多个文件的所有函数实例上执行宏,但我不确定如何做到这一点。
答案 0 :(得分:6)
如果它是一个没有嵌套parens的简单函数调用,那么你可以使用替换命令来完成它,如下所示:
:%s/\(myFunction\_s*(\(\_[^,]*,\)\{3}.*\_s*\)\_[^)]*/\1var4\r/
那么你可以用:bufdo
在所有开放缓冲区中做到这一点,但这是非常具体的,并且附带大量关于没有嵌套括号的警告,没有逗号是注释,我确信其他大多数情况下它都是不行。
键是\_
,它扩展了字符类,.
来匹配换行符。