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?

2 Answers 2

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.

3
  • I think that falls under the category of "easy fix". I figured it had to be something like that, but wasn't sure how the indent stuff was defined. Worked perfectly.
    – Herms
    Commented Jul 14, 2011 at 14:13
  • I'm using built in vim on OSX. Any idea what $VIMRUNTIME is? vim is at /usr/bin/ (not a symlink) Commented Apr 28, 2013 at 6:21
  • 1
    @JohnHinnegan: You should be able to open Vim and execute :echo $VIMRUNTIME.
    – garyjohn
    Commented Apr 29, 2013 at 5:11
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.

1
  • Sorry, I installed the plugin you mention but the <li>'s are not indented correctly for me.. I copied ragtag.vim to my ~/.vim/plugin/ directory, then restart vim, and gg=G
    – tirenweb
    Commented Oct 8, 2013 at 17:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .