2010-10-14 74 views
0

如何保留以X条件开始的句子并删除符合Y条件的句子。 使用vim,我想删除所有不以void开头的句子。正则表达式:句子选择

void set_first_name(string in_first_name);
string first_name();
void set_last_name(string in_last_name);
string last_name();
void set_composer_yob(int in_composer_yob);
int composer_yob();
void set_composer_genre(string in_composer_genre);
string composer_genre();
void set_ranking(int in_ranking);
int ranking();
void set_fact(string in_fact);

回答

3

Vim的命令:克和:v在这里帮助。

:g/regex/action 

'g'全局选择匹配正则表达式的所有行,并将操作应用于它们。 “v”颠倒正则表达式(如grep -v),因此将操作应用于所有不匹配的行。

所以要删除所有行不是空白开始:

:v/^void/d 

其中“d”是要删除的行的动作。

0

通常情况下,这个正则表达式应该是这样的:

^(?!\s*void).*\n 

也就是说,匹配线(^)开始,然后断言,你不能匹配void这里,任选被前面空格,然后匹配所有字符,直到下一个换行符。

似乎(感谢@Al),该Vim支持经由不同的语法先行(\@!负,\@=正先行),所以这种模式有可能转化为

^(\@!\s*void).*\n 
+0

如果不支持lookahead,可以使用'^([^ v] | v [^ o] | vo [^ i] | voi [^ d])。*'代替。 – Jens 2010-10-14 08:35:27

+0

Vim确实支持lookahead:positive是'\ @ =',negative是'\ @!'。所以你的模式是'^ \(\ s * void \)\ @!* \ n'(Vim会自动处理回车)。 – DrAl 2010-10-14 10:34:05