Vim 格式化使用 gg=G 和 xml

Posted

技术标签:

【中文标题】Vim 格式化使用 gg=G 和 xml【英文标题】:Vim formatting using gg=G with xml 【发布时间】:2012-07-24 05:14:21 【问题描述】:

我有一个格式正确的 xml 文件,并按照此处给出的命令作为答案:

How can I autoformat/indent C code in vim?

我正在尝试自动缩进我的文件以显示正确的嵌套。

在尝试使用此命令之前,我使用 :set ft=xml 将文件类型设置为 xml 因为我开始使用的文件的扩展名为.mm,还有:set nowrap

这是我的 ~/.vimrc 文件:

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

为什么当我发出gg=G 时,我收到一条消息说54 lines indented,但我的文件仍未嵌套?

【问题讨论】:

不是直接回答,但你试过xmllint --format 吗? 不,我没有,我现在并没有真正需要格式化文件 - 我真的只是在寻找这个命令没有做什么的原因我希望它在vim中。不过感谢您的建议。 【参考方案1】:

如果你想试试 Vim 自己的 XML 缩进器,你可以...

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

这将在 $VIMRUNTIME/indent/xml.vim 加载 vimscript

那么当你这样做时

: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>

【讨论】:

我很好奇为什么你觉得 xmllint 更好。根据我的经验,它在删除空白换行符和 cmets 方面过于激进,而 Vim 的内置 XML 缩进器 only 会按预期缩进前导空格。顺便说一句:我在让 Vim 的内置 XML 格式化程序正常工作之前遇到了很多麻烦,直到我采用了 tpope 的 vim-sensible 默认值,此时一切都“正常工作”,包括 vim 的等于 (=) 运算符。另见***.com/a/28365920/1207769【参考方案2】:

尝试输入::set equalprg?。如果它显示equalprg=,则表示您没有为 xml 缩进设置程序,因此它可能正在执行一些愚蠢的默认操作。这是将 xmllint 设置为格式化程序的指南:http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

【讨论】:

谢谢!那效果很好。我正在观看Derek Wyatt's vim Screencasts 之一,只是假设vim 知道如何自己嵌套xml。 很好地参考了将 xmllint 设置为格式化程序的指南。格式化 XML 可能是一件非常个性化的事情……例如,您可能不想在所有情况下都缩进每个标签,或者您可能希望对长 text() 节点进行文本换行。所以 xmllint 的替代品可能是 xmlformat!

以上是关于Vim 格式化使用 gg=G 和 xml的主要内容,如果未能解决你的问题,请参考以下文章

vim格式化代码

vim命令中调整代码格式

自动代码格式化与 Vim 中的 Javascript Lint 冲突

Vim 中的自动格式选项 (=) 不能正确缩进 HTML+JS?

vim命令模式下光标移动+查找

转到vim文件的第一行?