Vim: Membuat teks XML "cantik"


33

Apakah ada cara mudah viuntuk membuat teks XML Anda "cantik"?

Sebagai contoh:

Saya ingin ini..

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

menjadi ini ...

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

Jika semuanya gagal, selalu ada makro. qq0dt<jqdan kemudian 3@qj@@5k4I<space><esc>j.j.j.. Wow, itu terlihat sangat samar.
Braden Best

Jawaban:


39

Saya paling beruntung dengan ini:

:%!xmllint --format %

Namun, tag Anda ketat, sehingga akan keluar kesalahan jika tag pembuka dan penutup Anda tidak cocok. Itu juga menambahkan deklarasi XML di bagian atas file Anda, jika Anda tidak memilikinya juga.

Halaman ini merekomendasikan yang berikut, meskipun saya tidak bisa membuatnya berfungsi:

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

Saya mengujinya, dan sepertinya berhasil, agak. Tidak sempurna, tapi itu menyelesaikan pekerjaan.

Jika itu tidak berhasil, Anda bisa menggunakan minidom dengan Python untuk memformatnya untuk Anda.

import xml.dom.minidom

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

Itu gg=Gperintah tidak benar-benar bekerja. Sebaliknya, itu hanya menghapus semua lekukan sebelumnya yang saya miliki.
Rob Avery IV

Ya, saya sudah menemukan hal yang sama. Tampaknya berfungsi ketika saya sudah memiliki tipe pemformatan tertentu, tetapi biasanya tidak. Saya harus mengujinya sedikit lagi.
Nate

1
:%!xmllint --format %tampaknya berfungsi dengan baik, jadi saya telah menambahkannya ke pos.
Nate

1
@kenny Saya mengubah jawaban untuk mengatasinya
törzsmókus

2
Saya sedang melakukan ": set ft = xml |%! Xmllint --format -" untuk membuatnya bekerja pada buffer saat ini dan hidupkan penyorotan sintaks
grebulon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.