Vim:XMLテキストを「きれい」にする


33

viXMLテキストを「きれい」にする簡単な方法はありますか?

例えば:

これ欲しい..

            <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.。うわー、それはかなり不可解に見えます。
ブレーデンベスト

回答:


39

私はこれで最も幸運でした:

:%!xmllint --format %

ただし、タグは厳密であるため、開始タグと終了タグが一致しない場合はエラーになります。また、XML宣言がない場合は、ファイルの先頭にXML宣言も追加します。

このページでは以下を推奨していますが、動作させることはできません。

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

私はそれをテストしましたが、いくらかうまくいくようです。完全ではありませんが、仕事は完了です。

それでもうまくいかない場合は、Pythonでminidomを使用してフォーマットを設定できます。

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-"を実行して、現在のバッファーで機能させ、構文の強調表示を有効にします。
グレブロン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.