Vim缩进xml文件

时间:2014-01-28 14:25:31

标签: xml vim

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

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

gg=G 

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

我的.vimrc是:

syntax on 
filetype plugin indent on 
set nu 

9 个答案:

答案 0 :(得分:168)

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

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

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

底部的命令行如下所示:

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

然后按回车。

技术说明

所选文字将发送至xmllint命令,然后--format'编辑,xmllint的结果将显示在vim中的所选文字上。命令末尾的-用于接收标准输入 - 在这种情况下,是vim发送给xmllint的选定文本。

答案 1 :(得分:60)

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

:set equalprg=xmllint\ --format\ -

现在你可以执行

gg=G

xmllint格式化您的xml文件。

要在每次使用时获取,请使用autocommand进行设置。

autocommand来自以下评论

au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null

答案 2 :(得分:29)

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

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

答案 3 :(得分:11)

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

答案很长:我已尝试过很多策略来自动缩进Vim中的XML,包括xmllint approach discussed on the Vim wikixmllint的问题(以及与xmlformattidy等其他外部CLI工具相同的方法)是他们都坚持挤出空白换行符。如果您只想缩进XML,而不删除空行,注释和/或其他有意格式,那么xmllint不是最佳选择。

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

答案 4 :(得分:10)

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

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

filetype indent on
set smartindent

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

您还可以使用可视模式选择所需的文本,然后点击=缩进。

答案 5 :(得分:4)

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

:%!XMLLINT_INDENT="^I" xmllint --format -

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

答案 6 :(得分:1)

我遇到了同样的问题。事实证明,该行

bar
set viewdir=~\.vim\views\ 中的

导致了这个问题。只要确保你没有它。

答案 7 :(得分:1)

Jesse Hogan的答案很好,但我宁愿回答更简单:

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

:%!xmllint --format %

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

记住,您应该已经安装过 xmllint

答案 8 :(得分:0)

对于使用coc.nvim插件的用户,您可以通过coc-xml安装:CocInstall coc-xml ,然后在您的配置文件nmap <silent> fm <Plug>(coc-format)中映射格式密钥。从现在开始,您不仅可以格式化xml文件,还可以非常轻松地格式化其他文件