Vim Tips Wiki
Advertisement

Proposed tip Please edit this page to improve it, or add your comments below (do not use the discussion page).

Please use new tips to discuss whether this page should be a permanent tip, or whether it should be merged to an existing tip.
created August 10, 2007 · complexity intermediate · author Alex Jakushev · version 6.0

One part of converting from HTML to XHTML is changing all the tags to lowercase. If you open your HTML file in Vim, this task may be done with this piece of Vim magic:

:%s/<\/\?\zs\(\a\+\)\ze[ >]/\L\1/g

Note that this will change tag names only. To change tag attributes to lowercase as well (multiple attributes supported), use this command:

:%s/\(<[^>]*\)\@<=\<\(\a*\)\ze=['"]/\L\2/g

Comments

This should work as well:

:%s/<\([^>]*\)>/<\L\1>/g
This is exactly what I thought of to start with. It is a nice, simple, easy regular expression to accomplish almost the same task. But, it is not quite equivalent. The two regular expressions given in the tip would replace <TAG ATTR='VAL'> with <tag attr='VAL'>, whereas this one would replace it with <tag attr='val'>. Sometimes this is desired, sometimes not, for example with <p class='bigLongClassName'>. Note that none of these regular expressions will work across linebreaks.

Advertisement