Vim缩进xml文件

我正在学习Vim,但我认为这是一个简单的任务,但我不能得到它的工作。 我有浏览器,但解决scheme不适合我。

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

gg=G 

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

我的.vimrc是:

 syntax on filetype plugin indent on set nu 

我喜欢Berei的回答。 不过,我认为以下几点更灵活一些,因为你不需要改变你的vimrc文件。 另外,格式化XML文件的select部分更容易(我碰巧做了很多事情)。

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

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

底部的命令行如下所示:

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

然后按回车。

技术说明

所选文本被发送到xmllint命令,然后--format ,并且xmllint的结果被放置在vim中所选的文本上。 命令的结尾是接收标准input – 在这种情况下,是vim发送给xmllint的选定文本。

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

 :set equalprg=xmllint\ --format\ - 

现在你可以执行了

 gg=G 

xmllint格式化你的xml文件。

为了在每次使用vim时获得它,使用autocommand来设置它。

autocommand从下面的评论

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

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

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

简短的回答:使用vim- sensible ,默认打开matchit.vim 。

很长的回答:我已经尝试了很多策略来在Vim中自动缩进XML,包括在Vim wiki上讨论的xmllint方法 。 xmllint的问题(和其他外部CLI工具,如xmlformattidy )也是,他们都坚持要挤出空白的换行符。 如果你只想缩进你的XML,而不删除空行,注释和/或其他有意的格式,那么xmllint不是最好的select。

事实certificate,只要启用matchit.vim脚本,Vim的equals(=)命令已经支持XML。 一个超级简单的方法是采用tpope的vim- sensible。 然后,XML格式化将“刚刚起作用”。

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

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

 filetype indent on set smartindent 

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

您也可以select所需的文字与视觉模式,并打= =缩进。

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

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

^I是一个单一的字符,你通过生成: CTRL + vCTRL + i

我有同样的问题。 原来,那行

 set viewdir=~\.vim\views\ 

在我的.vimrc导致了这个问题。 只要确定,你没有它。