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 中的 Javascript Lint 冲突