我有一个像这样的功能
myFunction (
myStruct_1_Ptr *var1, /* commenty */
myStruct_2_Ptr *var2, /* commenty */
myStruct_3_Ptr *var3, /* commenty */
int info1,
int info2,
int info3,
int info4
)
Run Code Online (Sandbox Code Playgroud)
比我在包装结构中移动所有这些信息,我想让它看起来像
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 */
)
Run Code Online (Sandbox Code Playgroud)
该函数由类似的语法调用,只需删除前面的语法即可.
myFunction (
var1, /* commenty */
var2, /* commenty */
var3, /* commenty */
var4 /* This is where all infos went in */
);
Run Code Online (Sandbox Code Playgroud)
我如何通过搜索和替换(或其他任何东西)来做到这一点?我在这里只写一种生活只在两个地方,在相应的声明部分.c和.h文件,但我想我调用该函数的所有地方做同样.赋予函数的变量名称都是相同的.
S&R的另一种方法可能是在多个文件的所有函数实例上执行宏,但我不确定如何做到这一点.
如果它是一个没有嵌套parens的简单函数调用,那么你可以使用替换命令来完成它,如下所示:
:%s/\(myFunction\_s*(\(\_[^,]*,\)\{3}.*\_s*\)\_[^)]*/\1var4\r/
Run Code Online (Sandbox Code Playgroud)
然后你可以在所有打开的缓冲区中执行:bufdo此操作,但这是非常具体的,并且附带大量关于没有嵌套括号的警告,没有逗号是注释,我确信其他大多数情况都无法正常工作.
关键是\_扩展字符类和.匹配换行符.