首页 > 解决方案 > 在 main() 之前选择原型

问题描述

我需要一个正则表达式来选择之前的原型main()。所以对于下面的代码:

#include <stdio.h>                                                       

char ga[] = "abcdefghijklm";                                             

void my_array_func(char ca[10]);                                          
void my_pointer_func(char *pa);                                           

int main()                                                               
{                                                                        
   /* code */                       

   return 0;                                                            
}                 

原型上方和下方都有一个空行。选定的文本应该是

void my_array_func(char ca[10]);                                          
void my_pointer_func(char *pa); 

我目前在 Vim 中的尝试是:

^\w\_.\{-}\(^\nint main\)\@=

但这匹配

char ga[] = "abcdefghijklm";                                             

void my_array_func(char ca[10]);                                          
void my_pointer_func(char *pa);

标签: regexvim

解决方案


这应该工作

/^$\n\zs.*\n.*\ze\n\nint main

但可能需要一些改进,它不会检查您要选择的 2 行上是否确实存在有效文本。但这里重要的部分:h \zs:h \ze


推荐阅读