使用gg=G和xml进行Vim格式化

使用gg=G和xml进行Vim格式化,xml,vim,indentation,shortcuts,Xml,Vim,Indentation,Shortcuts,我有一个格式正确的xml文件,下面是作为答案给出的命令: 我正在尝试自动缩进文件以显示正确的嵌套 在尝试使用此命令之前,我使用: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

我有一个格式正确的xml文件,下面是作为答案给出的命令:

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

在尝试使用此命令之前,我使用
: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行缩进
,但我的文件仍然没有嵌套?

尝试键入:
:set equalprg?
。如果它说
equalprg=
,这意味着您没有xml缩进的程序集,所以它可能在执行一些愚蠢的默认操作。这里有一个将xmllint设置为格式化程序的指南:

如果您想尝试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=xmldindentget(v:lnum,1)

~~

但是xmllint更好,请参见

我在我的.vimrc中有这样方便的键绑定

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

" pretty-print current line
nmap ,px !!xmllint --format -<CR>
“一行或多行:
vmap,px!xmllint--格式-
“漂亮的打印当前行
nmap,px!!xmllint——格式-

这不是一个直接的答案,但您是否尝试过格式化?不,我没有,我现在真的不需要格式化文件-我只是想知道为什么这个命令没有在vim中实现我期望的效果。谢谢你的建议,谢谢!这很有效。我看了其中一个,只是假设vim知道如何自己嵌套xml。关于将xmllint设置为格式化程序的指南非常有用。格式化XML可以是一件非常个性化的事情。。。例如,您可能不希望在所有情况下缩进每个标记,或者可能希望对长text()节点进行文本换行。因此,xmllint的另一种替代方案可能是!我很好奇为什么你觉得xmllint更好。根据我的经验,它在删除空白换行符和注释方面过于激进,而Vim的内置XML缩进器只按预期缩进前导空格。作为对那些感兴趣的人的旁白:我在让Vim的内置XML格式化程序正常工作方面遇到了很多麻烦,直到我采用了tpope的默认值,在这一点上,包括Vim的equals(=)操作符在内的一切都“正常工作”。另见