2016-12-02 34 views
3

之間的文件片段的,我試圖削減Vim的替代品:刪除所有指定的字

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 

和許多其他變化。我對正則表達式的掌握相當薄弱。

回答

3

起初,我會刪除其不包含所搜索的圖案(HTMName=在該行的開始)的所有行,然後我會刪除所搜索的圖案

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

:v裝置執行的命令(在這種情況下「:d」)在{pattern}(在本例中,「HTMName =」在行首)不匹配的行上。

:d表示刪除行。

查看更多的幫助:

PS:如果你的模式不只是一條線,你可以嘗試

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

v和d代表? – MYGz

+1

'v'是一個像'g'這樣的全局命令,但是它的操作符合搜索模式。在這種情況下,對於不以'HTMName ='開始的每行,執行'd' *(=刪除行)* –

+2

btw,可以縮短爲'v/^ HTMName =/d |%s' –