4

By default Vim seems to not want to indent the contents inside of <li> tags, though it autoindents properly for most other HTML tags.

For example, if I start with this code:

<ul>
<li>
foo
</li>
<li>
bar
</li>
</ul>

and have vim autoindent it I get:

<ul>
  <li>
  foo
  </li>
  <li>
  bar
  </li>
</ul>

However, what I really want is this:

<ul>
  <li>
    foo
  </li>
  <li>
    bar
  </li>
</ul>

It's kind of annoying when writing new code to have it autoindent after most opening tags but not this one, though that's easy enough to work around. Where this is really getting to me is when using vim to autoformat some large generated HTML that I'm trying to play around with (trying to mock up some UI changes using the generated source).

Is there any easy way to change this autoindent behavior so that it treats <li> just like any other opening tag, and indent the contents?

Herms
  • 9,992

2 Answers2

7

I don't see an easy way to do it, but this solution isn't too difficult.

  1. Copy $VIMRUNTIME/indent/html.vim to ~/.vim/indent/html.vim if you're on Unix or to ~/vimfiles/indent/html.vim if you're on Windows.
  2. Edit your copy of indent/html.vim, adding this line,

    call <SID>HtmlIndentPush('li')

    to the list of similar calls already in that file.

That should do it.

garyjohn
  • 36,494
2

If anyone else finds this question like I did, via google, there is another solution using Tim Pope's rag-tag extension. This will automatically add the correct indentions and update some other tags for HTML5.