使用gg=G命令在xml文件中格式化Vim

11
我有一个格式正确的XML文件,根据这里给出的答案,我尝试使用以下命令自动缩进文件以显示正确的嵌套:如何在vim中自动格式化/缩进C代码? 在尝试使用此命令之前,我使用: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行的消息,但我的文件并没有被嵌套?


1
不是直接回答,但你尝试过使用xmllint --format吗? - ephemient
不,我没有,我现在真的没有内在的需要格式化文件 - 我只是在寻找为什么这个命令在vim中没有按照我的期望执行的原因。谢谢你的建议。 - grimetime
2个回答

21

如果你想尝试 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>

1
我很好奇你为什么认为xmllint更好。在我的经验中,它过于激进地修剪空白换行符和注释,而Vim的内置XML缩进器仅按预期缩进前导空格。顺便提一下,对于那些感兴趣的人:我曾经遇到过很多麻烦,无法让Vim的内置XML格式化程序正常工作,直到我采用了tpope的vim-sensible默认设置,此时一切“都可以工作”,包括vim的等号(=)运算符。另请参见https://dev59.com/JGEi5IYBdhLWcg3wUK2C#28365920 - ctrueden

6

谢谢!那很有效。我正在观看Derek Wyatt的vim Screencasts之一,只是假设vim知道如何自行嵌套xml。 - grimetime
2
非常好的指南参考,可以帮助您设置xmllint作为格式化程序。格式化XML可能是一件非常个性化的事情...例如,您可能不想在所有情况下缩进每个标记,或者您可能希望对于长文本()节点进行文本换行。因此,xmllint的替代方案可能是xmlformat - darcyparker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接