grimetime
grimetime

Reputation: 390

Vim formatting using gg=G with xml

I have a correctly formatted xml file, and following the command given as an answer here:

How can I autoformat/indent C code in vim?

I am trying to auto indent my file to display correct nesting.

Before I tried to use this command I set the file type to xml using :set ft=xml as the file I started with has an extension of .mm, and also :set nowrap.

Here is my ~/.vimrc file:

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

How come when I issue gg=G, I get a message saying 54 lines indented, yet my file remains un-nested?

Upvotes: 11

Views: 14073

Answers (2)

David Lam
David Lam

Reputation: 4948

in case you wanna try Vim's own XML indenter thing, you can...

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

this will load the vimscript at $VIMRUNTIME/indent/xml.vim

then when you do

:set indentexpr?        

...it'll say indentexpr=XmlIndentGet(v:lnum, 1)

~~

xmllint is better though, see... http://vim.wikia.com/wiki/VimTip349

i have handy keybinding like this for it in my .vimrc!

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

" pretty-print current line
nmap ,px !!xmllint --format -<CR>

Upvotes: 21

Matt Boehm
Matt Boehm

Reputation: 1912

Try typing: :set equalprg?. If it says equalprg= it means that you do not have a program set for xml indentation, so it's probably doing some dumb default action. Here's a guide for setting xmllint as your formatter: http://ku1ik.com/2011/09/08/formatting-xml-in-vim-with-indent-command.html

Upvotes: 6

Related Questions