views:

192

answers:

1

Hi! Here's what I'd like to do, for each one of many files:

  • search for all occurrences of "<a href" then begin block selection
  • select until the first occurrence of ">"
  • convert the entire match to lowercase

Thanks again,

Olivier Pons

+6  A: 

Check it out:

s/<a href\(\_[^>]*\)>/<a href\L\1>/

This says: match <a href, followed by zero or more characters besides >, including newlines (indicated by \_), and then finally a >. Replace it with <a href, the captured text converted to lowercase (indicated by \L), and the trailing >.

Obviously you're on your own if there's a > somewhere inside your tag, but such is life.

(And in case it's not clear, you'll use this as :%s/.../... or :<range>s/.../.../ for some smaller range.)

To use this on multiple files, you'll use windo, bufdo, or tabdo (depending on whether the files are open as tabs, windows, or just as buffers). There's a lot of documentation out there:

In general, it'll probably look something like this:

:tabdo <range>s/.../.../
:windo <range>s/.../.../
:bufdo <range>s/.../.../ | w

I've added a write command to the bufdo version, because it can't move on to the next buffer without saving the current one. You could do this for the others too, if you wanted to write immediately, but they'll work without. It's up to you to get all the files open - the easiest way is just vim <lots of files> to get them as buffers, or vim -o <lots of files> to get them as windows (use -O to split vertically instead of horizontally).

Jefromi
Thank you very much indeed, this should be exactly what I wanted, I'm going to check it out immediatly!
Olivier Pons