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

Answers:


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命令并没有真正起作用。相反,它只是删除了我之前所有的缩进。
罗伯·艾弗里四世

是的,我发现了同样的事情。当我已经有一种特定类型的格式时,它似乎可以工作,但通常没有。我将不得不对其进行更多测试。
Nate

1
:%!xmllint --format %似乎效果很好,所以我将其添加到了帖子中。
Nate

1
@kenny我修改了答案,以应付那
törzsmókus

2
我正在执行“:set ft = xml |%!xmllint --format-”以使其在当前缓冲区上工作并打开语法突出显示
grebulon '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.