Vim替换:删除指定单词之间的所有内容

3

我正在尝试截取的文件片段

HTMName=[...] owns the means of production. Proletariat do not and sell their labor power.
HTMFile=x
ClickPlay=0
TestElement=0

Type=HTML
Cors=123
DisplayAt=215
Hyperlink=0
HTMName=Bourgeois
HTMFile=x
ClickPlay=0

最终结果

[...] owns the means of production. Proletariat do not and sell their labor power.
Bourgeois

我知道文件的顶部和底部可能会有剩余部分。 我尝试过以下方法:

:s%/^\sHTMFile[\s\S]*\n\s*HTMName=$//g

还有许多其他变体,都返回“未找到模式”的结果。我对正则表达式的理解相当薄弱。

1个回答

3

首先,我会删除所有不包含搜索模式(行首为HTMName=)的行,然后再删除搜索模式。

:v/^HTMName=/d
:%s///

:v的意思是在不匹配{pattern}(在此例中为行首的"HTMName=")的行上执行一个命令(在此例中为":d")。

:d的意思是删除行。

更多信息请查看帮助:

PS:如果您的模式不仅出现在一行中,您可以尝试:

:%s/^HTMName=\(\_.\{-}\)HTMFile=\|.*/\1/

1
v和d代表什么? - Mohammad Yusuf
1
v是类似于g的全局命令,但它作用于不匹配搜索模式的行。在这种情况下,对于每一行不以HTMName=开头的行,执行d(即删除该行)。 - Lieven Keersmaekers
2
顺便提一下,你可以将其缩短为 v/^HTMName=/d|%s - Lieven Keersmaekers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接