如何删除与特定模式不匹配的信息块,说明:
[received]
some_text
...
MYPATTERN
some_other_text
[received]
some_text
...
IGNORED_MESSAGE
some_other_text
[sent]
some_text
...
ALSO_IGNORE_THIS_ONE
some_other_text
[sent]
some_text
...
MYPATTERN
some_other_text
如何使用:s
或:g
仅保留包裹,阻止信息与MYPATTERN
,具体结果如下:
[received]
some_text
...
MYPATTERN
some_other_text
[sent]
some_text
...
MYPATTERN
some_other_text
如果单个命令太复杂,可以建议使用函数。
答案 0 :(得分:4)
清空一个寄存器,比如注册h
:
qhq
将所有匹配的块切割为寄存器h
:
:g/MYPATTERN/normal "Hdap
删除整个缓冲区:
:%d
放置注册h
的内容:
:put h
答案 1 :(得分:2)
%s/\v\[((MYPATTERN)@!\_.){-}\n\s*\n//
正则表达式解释:
\[
以匹配每个段落的开头\_.
匹配任何字符,包括行尾{-}
匹配0次或更多次,类似于*
但非贪婪(尽可能少)((MYPATTERN)@!\_.){-}
- MYPATTERN之前没有任意数量的字符 - 有关详细信息,请参阅:help \@!
\n\s*\n
匹配一个空行,标记段落的结尾