Vim: Tạo văn bản XML khá đẹp


33

Có cách nào dễ dàng viđể làm cho văn bản XML của bạn "đẹp" không?

Ví dụ:

Tôi muốn cái này ..

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

để được ...

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

Nếu vẫn thất bại, luôn có macro. qq0dt<jqvà sau đó 3@qj@@5k4I<space><esc>j.j.j.. Wow, có vẻ khá khó hiểu.
Braden hay nhất

Câu trả lời:


39

Tôi đã có nhiều may mắn nhất với điều này:

:%!xmllint --format %

Mặc dù vậy, nó nghiêm ngặt về các thẻ của bạn, vì vậy nó sẽ báo lỗi nếu các thẻ mở và đóng của bạn không khớp. Nó cũng thêm một khai báo XML ở đầu tệp của bạn, nếu bạn không có một khai báo.

Trang này khuyến nghị những điều sau, mặc dù tôi không thể làm cho nó hoạt động:

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

Tôi đã thử nghiệm nó, và nó dường như hoạt động, phần nào. Không hoàn hảo, nhưng nó hoàn thành công việc.

Nếu điều đó không hoạt động tốt, bạn có thể sử dụng minidom trong Python để định dạng nó cho bạn.

import xml.dom.minidom

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

Đó là gg=Glệnh không thực sự làm việc. Thay vào đó, nó chỉ loại bỏ tất cả các vết lõm trước đây tôi có.
Cướp Avery IV

Vâng, tôi đã tìm thấy điều tương tự. Nó dường như hoạt động khi tôi đã có một loại định dạng cụ thể, nhưng thường thì không. Tôi sẽ phải kiểm tra thêm một chút nữa.
Nate

1
:%!xmllint --format %dường như hoạt động tốt, vì vậy tôi đã thêm nó vào bài viết.
Nate

1
@kenny Tôi đã sửa đổi câu trả lời để đối phó với điều đó
törzsmókus

2
Tôi đang làm ": đặt ft = xml |%! Xmllint --format -" để làm cho nó hoạt động trên bộ đệm hiện tại và bật đánh dấu cú pháp
grebulon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.