2012-04-11 99 views
2

我有一个像搜索和替换一个多模式Vim内部

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文件中的两个地方—,但我希望与所有调用该函数的地方类似。赋予该函数的变量名称都是相同的。

R & R的另一种方法可能是在多个文件的函数的所有实例上执行一个宏,但我不确定该怎么做。

回答

6

如果它是一个简单的函数调用没有嵌套的括号,然后你可以用替换命令,像这样做:

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

那么你就可以做到这一点所有打开的缓冲区与:bufdo,但这是非常具体的,并提出了关于没有嵌套括号吨警告,没有逗号是评论,我敢肯定吨的其他情况下,它不会正常工作。

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