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.. Нічого собі, це виглядає досить задумливо.
Braden Best

Відповіді:


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 %здається, працює добре, тому я додав це до посади.
Нейт

1
@kenny Я змінив відповідь, щоб впоратися з цим
törzsmókus

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