Vim: сделать XML-текст «красивым»


33

Есть ли простой способ viсделать ваш текст XML "красивым"?

Например:

Я хочу это..

            <person>
  <name>Nick</name>
 <age>26</age>
         <gender>male</gender>
<occupation>doctor</occupation>
    </person>

быть этим ...

<person>
    <name>Nick</name>
    <age>26</age>
    <gender>male</gender>
    <occupation>doctor</occupation>
</person>

Если ничего не помогает, всегда есть макросы. qq0dt<jqа потом 3@qj@@5k4I<space><esc>j.j.j.. Вау, это выглядит довольно загадочно.
Брэден Бест

Ответы:


39

Мне больше всего повезло с этим:

:%!xmllint --format %

Тем не менее, он строго относится к вашим тегам, поэтому выдает ошибку, если ваши открывающие и закрывающие теги не совпадают. Он также добавляет объявление XML вверху вашего файла, если у вас его тоже нет.

На этой странице рекомендуется следующее, хотя я не могу заставить его работать:

:set filetype=xml
:filetype indent on
gg=G

Я проверил это, и это, кажется, работает, несколько. Не идеально, но это делает работу.

Если это не сработает, вы можете использовать minidom в Python для его форматирования.

import xml.dom.minidom

xml = xml.dom.minidom.parse(filename)
formatted_xml = xml.toprettyxml()

Эта gg=Gкоманда не сработала. Вместо этого он просто удалил все предыдущие отступы, которые у меня были.
Роб Эйвери IV

Да, я нашел то же самое. Кажется, работает, когда у меня уже есть определенный тип форматирования, но обычно нет. Я должен проверить это немного больше.
конец

1
:%!xmllint --format %Кажется, работает хорошо, поэтому я добавил это к посту.
Nate

1
@kenny Я изменил ответ, чтобы справиться с этим
törzsmókus

2
Я делаю ": set ft = xml |%! Xmllint --format -", чтобы заставить его работать с текущим буфером и включить подсветку синтаксиса
grebulon
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.