Vim - удаление комментариев XML - PullRequest
8 голосов
/ 12 ноября 2009

Как удалить комментарии в XML?

Если открывающий и закрывающий теги комментариев находятся на одной строке, я использую :g/^<!--.*-->$/d, чтобы удалить комментарий. Как удалить комментарии, которые распределены по многим строкам?

Ответы [ 5 ]

18 голосов
/ 12 ноября 2009

\_. вместо . позволяет сопоставлять все символы, включая символы новой строки. Но это само по себе заставит движок регулярных выражений перегружаться, так как регулярные выражения по умолчанию жадные. Используйте \{-} вместо * для не жадного совпадения со всеми.

Поскольку команда g/ /d удаляет только одну строку (даже для многострочного соответствия), было бы предпочтительно переключиться на s/ / /g (заменить глобальным).

:%s/<!--\_.\{-}-->//g

2 голосов
/ 12 ноября 2009

G'day,

Не входит

da>

удалить комментарий, когда курсор находится где-то внутри блока комментариев?

У вас должен быть vim с включенными текстовыми объектами во время компиляции. Ввод:

:vers

позволит вам увидеть, включены ли в вашей сборке текстовые объекты.

Есть много таких прикольных текстовых выделений. Взгляните на соответствующую страницу в документах .

Редактировать: Возможно, вам придется добавить

set matchpairs+=<:>

в ваш .vimrc, чтобы это работало.

НТН

ура

2 голосов
/ 12 ноября 2009

Вы должны использовать XSLT для преобразования файла в новый файл. Вы используете преобразование идентичности с дополнительным правилом, чтобы не копировать комментарии.

<xsl:template match="node()|@*">
   <xsl:copy>
     <xsl:apply-templates select="@*"/>
     <xsl:apply-templates/>
   </xsl:copy>
 </xsl:template>

<xsl:template match="comment()"/>

Вы можете использовать "xsltproc" в пакете libxslt в Linux, чтобы сделать это как скрипт, который, я думаю, вы можете запустить из vim.

0 голосов
/ 12 ноября 2009

, если это не слишком хлопотно, и у вас есть gawk в вашей системе. Вы можете попробовать это

$ more file
<!--
asdlfj
sdjf
;jsgsdgjasl -->
text i want
i want
....
<!-- junk junk -->
i want text
anthor text
end

$ gawk -vRS='-->' '{ gsub(/<!--.*/,"")}1' file


text i want
i want
....


i want text
anthor text
end
0 голосов
/ 12 ноября 2009

Я считаю, что это должно работать:

:g/<!--.*?-->/d

Знак вопроса делает звездочку «ленивой» вместо «жадной», означая, что она будет соответствовать как можно меньшему количеству символов для удовлетворения выражению Это не позволяет выражению удалить среднюю часть этого примера:

We want to keep this<!-- This is a comment -->We also want to keep this<!-- Another comment -->

РЕДАКТИРОВАТЬ: Похоже, что vge вкус регулярных выражений не поддерживает *? ленивое соответствие. Мой плохой.

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