使用gg=G和xml进行Vim格式化
我有一个格式正确的xml文件,下面是作为答案给出的命令: 我正在尝试自动缩进文件以显示正确的嵌套 在尝试使用此命令之前,我使用使用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
: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(=)操作符在内的一切都“正常工作”。另见