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>
Роб Эйвери IV
источник
Если ничего не помогает, всегда есть макросы. 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()
Nate
источник
Эта gg=Gкоманда не сработала. Вместо этого он просто удалил все предыдущие отступы, которые у меня были.
Роб Эйвери IV
Да, я нашел то же самое. Кажется, работает, когда у меня уже есть определенный тип форматирования, но обычно нет. Я должен проверить это немного больше.
конец
1
:%!xmllint --format %Кажется, работает хорошо, поэтому я добавил это к посту.
Nate
1
@kenny Я изменил ответ, чтобы справиться с этим
törzsmókus
2
Я делаю ": set ft = xml |%! Xmllint --format -", чтобы заставить его работать с текущим буфером и включить подсветку синтаксиса
grebulon