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 ที่ดีที่สุด

คำตอบ:


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คำสั่งไม่ได้ทำงานจริงๆ แต่จะลบการเยื้องก่อนหน้าทั้งหมดที่ฉันมี
Rob Avery IV

ใช่ฉันได้พบสิ่งเดียวกัน ดูเหมือนว่าจะใช้งานได้เมื่อฉันมีการจัดรูปแบบเฉพาะแล้ว แต่โดยปกติจะไม่ ฉันจะต้องทดสอบมันอีกสักหน่อย
เนท

1
:%!xmllint --format %ดูเหมือนว่าจะทำงานได้ดีดังนั้นฉันจึงได้เพิ่มมันไว้ในโพสต์
เนท

1
@ kenny ฉันได้แก้ไขคำตอบเพื่อรับมือกับสิ่งนั้น
törzsmókus

2
ฉันกำลังทำ ": set ft = xml |%! xmllint --format -" เพื่อให้ทำงานบนบัฟเฟอร์ปัจจุบันและเปิดใช้การเน้นไวยากรณ์
grebulon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.