Vim缩进xml文件

Haa*_*nti 88 xml vim

我正在学习Vim,但我认为这是一项简单的任务,但我无法让它发挥作用.我有浏览器SO,但解决方案对我不起作用.

我正在尝试正确缩进文件(xml).我使用的命令是:

gg=G 
Run Code Online (Sandbox Code Playgroud)

或ggVG =(自己做这个可能会做一些不同的事情;))

我的.vimrc是:

syntax on 
filetype plugin indent on 
set nu 
Run Code Online (Sandbox Code Playgroud)

Jes*_*gan 177

我喜欢Berei的回答.但是,我认为以下更灵活,因为您不必更改vimrc文件.此外,格式化XML文件的选择部分更容易(我碰巧做了很多事情).

首先,突出显示要格式化的XML.

然后,在正常模式下,键入 ! xmllint --format -

您在底部的命令行将如下所示:

:'<,'>!xmllint --format -

然后按回车键.

技术解释

选定的文本将发送到xmllint命令,然后--format'ed,结果xmllint将放在vim中的所选文本上.的-在命令的末尾是用于接收标准输入-其中,在这种情况下,是VIM发送到所选择的文本xmllint.

  • 为简化命令,`:%!xmllint --format -`,`%`表示此xml文件的整个范围. (59认同)
  • @ erikb85在搜索包和包内容时使用`apt-cache search`,而不是`apt-get`.`libxml2-utils`包含缺少的工具. (8认同)
  • 这当然只有在安装了外部工具xmllint并添加到路径中时才有效. (6认同)
  • 为什么每个人都期望有一个 xmllint 工具?在 Ubuntu 15.04 中没有,apt-get 也找不到。 (2认同)

Bir*_*rei 64

使用外部程序缩进xml文件.在这种情况下我选择了xmllint,所以将命令设置为equalprg选项:

:set equalprg=xmllint\ --format\ -
Run Code Online (Sandbox Code Playgroud)

现在你可以执行了

gg=G
Run Code Online (Sandbox Code Playgroud)

xmllint格式化你的xml文件.

要在每次使用时获取它,请使用a autocommand来设置它.

autocommand 来自下面的评论

au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用以下在.vimrc编辑XML文件时启用它 - ```AU文件类型的XML SETLOCAL equalprg = xmllint\--format\--recover\ - \2>的/ dev/null```.来源 - http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html (8认同)
  • 如果您使用的是 ubuntu,则需要安装 `libxml2-utils` 软件包才能获取 xmllint (3认同)

KFL*_*KFL 28

我喜欢的一个不需要任何第三方工具的简单解决方案是在每个开始标记"<...>"之前插入换行符.然后你可以使用标准的vim自动缩进.简而言之:

  1. %s/</\r</g
  2. gg=G 自动缩进

  • 我更喜欢'%s /> </>\r \n </ g`,因此每个文本元素都保持在同一行. (5认同)
  • @NicolaMusatti 或者如果标签之间有时有空格,`%s/&gt; *&lt;/&gt;\r&lt;/g` (2认同)

ctr*_*den 11

简短的回答:打开matchit.vim.您可以添加packadd matchit到您的.vimrc,或使用vim-sensible,默认情况下启用它.

答案长:我已经尝试了许多在Vim中自动缩进XML的策略,包括在Vim wiki上讨论xmllint方法.这个问题xmllint(并与其他外部CLI工具,如同样的方法xmlformattidy,太)是它们都坚持挤掉空白换行.如果你想要的只是缩进你的XML,而不删除空行,注释和/或其他有意的格式,那么xmllint这不是最好的选择.

事实证明,只要启用了matchit.vim脚本,Vim的equals(=)命令就已经支持XML了.一个非常简单的方法就是采用tpope的vim- sensible .另一个是加入packadd matchit你的.vimrc.然后,XML格式化将"正常工作"开箱即用.


jar*_*raj 10

一旦〜/ .vimrc设置正确,这很容易实现.

在〜/ .vimrc中设置以下选项:

filetype indent on
set smartindent
Run Code Online (Sandbox Code Playgroud)

这允许您将光标移动到文件的顶部并缩进到结尾:gg = G.

您还可以使用可视模式选择所需的文本,然后按=来缩进它.

  • 我想它将是`.vimrc`而不是`.bashrc`. (2认同)

小智 9

杰西霍根的答案很好,但我宁愿更简单的答案:

当您在 vim 中并打开 XML 文件时,在正常模式下编写以下内容:

:%!xmllint --format %
Run Code Online (Sandbox Code Playgroud)

然后按 Enter 键。您的所有 XML 文件都将被格式化。

请记住您之前应该安装过xmllint


Clo*_*oud 6

在 VIM 中,我使用以下命令自动缩进整个文件(使用硬制表符):

:%!XMLLINT_INDENT="^I" xmllint --format -
Run Code Online (Sandbox Code Playgroud)

^I是您通过以下方式生成的单个字符:CTRL+ v, CTRL+i