2012-07-25 59 views
11

我有一个格式正确的XML文件,并给出一个答案这里的命令如下:Vim的使用GG用XML格式= G

How can I autoformat/indent C code in vim?

我想自动缩进我的文件,以显示正确的嵌套。

之前,我试图用这个命令我设置文件类型使用:set ft=xml 我开始有.mm的扩展名的文件,以XML,也:set nowrap

这里是我的〜/ .vimrc文件:

syntax on 
set history=1000 
set smartindent 
set tabstop=2 
set shiftwidth=2 
set expandtab 

为什么当我发出gg=G,我得到一个消息说54 lines indented,但我的文件保持不嵌套?

+1

不是一个直接的答案,但你尝试过[xmllint(http://xmlsoft.org/xmllint.html)--format? – ephemient 2012-07-25 17:42:15

+0

不,我没有,我现在并没有真正需要格式化文件的内在需求 - 我只是在寻找这个命令没有达到我期望的vim的原因。 (还是)感谢你的建议。 – grimetime 2012-07-25 17:50:03

回答

19

的情况下,你想尝试Vim的自己的XML压头的事情,你可以...

:filetype indent on   (load indent files for specific file types etc.) 
:e       (to reload the current buffer) 

这将在$ VIMRUNTIME /缩进/ XML加载的Vimscript vim的

然后你做

:set indentexpr?   

...它会说indentexpr = XmlIndentGet(v:lnum缓冲区里,1)

~~

xmllint是更好不过,看到... http://vim.wikia.com/wiki/VimTip349

我有方便的按键绑定这样它在我的vimrc!

" one or more lines: 
vmap ,px !xmllint --format -<CR> 

" pretty-print current line 
nmap ,px !!xmllint --format -<CR> 
+1

我很好奇为什么你觉得xmllint更好。根据我的经验,在删除空白的换行符和注释方面过于积极,而Vim的内置XML压缩器_only_按照预期压缩了主要空格。除了那些感兴趣的人之外,我还有许多麻烦让Vim的内置XML格式化工作,直到我采用了tpope的[vim-sensible](https://github.com/tpope/vim-sensible)默认情况下,在这一点上,一切“刚刚工作”,包括vim的等于(=)运算符。另见http://stackoverflow.com/a/28365920/1207769 – ctrueden 2015-02-06 12:39:49

5

试试打字::set equalprg?。如果它说equalprg=这意味着你没有为xml缩进设置的程序,所以它可能会做一些愚蠢的默认操作。下面是设置xmllint为您格式化指南:http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

+0

谢谢!这很好。我正在观看[Derek Wyatt的vim Screencasts](http://vimeo.com/15443936)之一,并假设vim知道如何自己嵌套xml。 – grimetime 2012-07-25 18:29:18

+2

关于将xmllint设置为格式化程序的指南很有参考价值。格式化XML可以是一种非常个性化的事情......例如,您可能不想在所有情况下缩进每个标签,或者您可能想要为长文本()节点换行。所以xmllint的替代方案可能是[xmlformat](http://www.kitebird.com/software/xmlformat/)! – darcyparker 2012-07-25 23:19:50