> 
> Op woensdag 30 mei 2007, schreef wangxu:
> > I want to have this function:
> > formatting my xml file automatically.
> > or,indent xml element and attributes.
> >
> > is there any plugin like this?
> > thanks!
> 
> Well, if you're on a unix machine with xmllint installed, you 
> could do the following:
> 
> setlocal equalprg=xmllint\ --format\ -
> 
> and then use gg=G to reformat the entire document.

I don't have much luck with that technique.
If xmllint believes the xml isn't quite valid then it screws it up with
error messages and such.

I wrote this little function to do it for me.  Works well enough.
Basically, I either run the command 
:FormatSGML

Or, visually select some rows and run the command.

function! Format_SGML() range
    " Add a new line to the bottom of the mark to be removed later
    call cursor(a:lastline,1)
    put =''
    silent! exec "ma z"
    " Add a new line above the mark to be removed later
    call cursor(a:firstline,1)
    put! = ''
    silent! exec "ma y"
    
    " Put each tag on a newline
    exec line("'y").','.line("'z").'s/>\s*</>\r</ge'
    " Reformat using Vim's indenter
    call cursor(line("'y"),1)
    exec 'normal! '.(line("'z")-line("'y")+1).'=='

    " Delete the additional lines added
    silent! exe "norm! 'ydd'zdd"
endfunction
command! -range=% -nargs=0 FormatSGML <line1>,<line2>call Format_SGML()


At least you have some additional options now.


HTH,
Dave

Reply via email to