Vim Tips Wiki
(Added to HTML category + code reformatted)
(Change <tt> to <code>, perhaps also minor tweak.)
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Tip
+
{{TipNew
  +
|id=1513
|title=Changing all HTML tags to lowercase
 
  +
|previous=1511
|created=2007.08.10
 
  +
|next=1514
 
|created=2007
 
|complexity=intermediate
 
|complexity=intermediate
 
|author=Alex Jakushev
 
|author=Alex Jakushev
 
|version=6.0
 
|version=6.0
  +
|subpage=/200712
|text=
 
  +
|category1=Advanced Regex
  +
|category2=HTML
 
}}
 
}}
 
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:
   
  +
<pre>
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
+
:%s/<\/\?\zs\(\a\+\)\ze[ >]/\L\1/g
  +
</pre>
   
 
Note that this will change tag names only. To change tag attributes to lowercase as well (multiple attributes supported), use this command:
 
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
 
   
  +
<pre>
 
:%s/\(<[^>]*\)\@<=\<\(\a*\)\ze=['"]/\L\2/g
  +
</pre>
   
 
==Comments==
Originally published at http://31plus.blogspot.com/2007/08/changing-all-html-tags-to-lowercase.html
 
  +
This should work as well:
  +
<pre>
  +
:%s/<\([^>]*\)>/<\L\1>/g
  +
</pre>
  +
: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 <code><nowiki><TAG ATTR='VAL'></nowiki></code> with <code><nowiki><tag attr='VAL'></nowiki></code>, whereas this one would replace it with <code><nowiki><tag attr='val'></nowiki></code>. Sometimes this is desired, sometimes not, for example with <code><nowiki><p class='bigLongClassName'></nowiki></code>. Note that none of these regular expressions will work across linebreaks.
   
  +
----
== Comments ==
 
  +
The first search pattern does not recognize tags that have digits in it,
<!-- comments on the content of the tip go here, comments on the article itself can go to the discussion page -->
 
  +
like <code><nowiki><H1></nowiki></code>.
<!-- sign your comments with ~~~~ and separate them with ---- -->
 
  +
It can be corrected replacing the <code>\a</code> (=any alphabetic character) by a <code>\w</code> (=any word character) which includes digits.
 
[[Category:HTML]]
 

Latest revision as of 06:28, 13 July 2012

Tip 1513 Printable Monobook Previous Next

created 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.

The first search pattern does not recognize tags that have digits in it, like <H1>. It can be corrected replacing the \a (=any alphabetic character) by a \w (=any word character) which includes digits.