2016-12-02 7 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 и д означает? – MYGz

+1

'v' - глобальная команда типа' g', но она работает по строкам *, а не * соответствует шаблону поиска. В этом случае для каждой строки, не начинающейся с 'HTMName =', выполните 'd' * (= delete line) * –

+2

Кстати, вы можете сократить это до' v/^ HTMName =/d |% s' –