2010-10-14 70 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