Как обрезать любое количество пробелов в тегах XML с помощью регулярного выражения в VIM? - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь обрезать пробел в теге XML, это пример того, что у меня есть:

<xmlT ag>
content between tag
</xmlTa g>

до:

<xmlTag>
content between tag
</xmlTag>

(Это дубликат этого вопроса для Notepad ++, но с решением для vim, которое неочевидно.)

Примечание. Решение должно также обрабатывать несколько пробелов, например:

<messed up t ag>

который станет

<messseduptag>

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Следующая команда простой замены работает для первого примера:

%s/\(<\/*xml\w\+\)\s\+/\1/g 

Более общая замена удалит любое количество пробелов из произвольного тега XML

:%s/<\zs.*\ze>/\=substitute(submatch(0),' ','','g') 
0 голосов
/ 16 марта 2019

Ответ , предусмотренный для Notepad ++, включает использование обозначения [\s\w], которое не поддерживается в vim.

С комбинацией обоих ответов плюспонимание того, как выполнить позитивный просмотр в vim , вы можете использовать это выражение в vim для удаления любого количества пробелов в тегах xml:

:%s/\s\+\([[:space:][:alnum:]_]*>\)\@=//gc

Объяснение:

Мы ищем пробел (\s) один или несколько раз (+), который также имеет перед собой (\@=) пробел или буквенно-цифровойсимвол или подчеркивание (\([[:space:][:alnum:]_]*>\)) ноль или более раз (*), за которым следует >.Мы заменим один или несколько пробельных символов (то есть \s\+ от начала выражения) на ничего (//) по всему файлу (g) и запросим подтверждение (c) передвсе заменено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...