My .vimrc has these lines ...
let @o = ".nzz"
map <F8> @o
These commands allow me to make all sorts of edits without having to worry about escaping special characters of any kind. They also allow me to easily make multi line edits.
Once these commands are in your .vimrc, the procedure is as follows...
First, you must search for a pattern that matches all the occurrences you wish to change. This is important because my solution depends on moving to the next occurrence by using the find-next operator ('n')
For example, if you wish to edit all URLs from host 'abcxyz.com' that end in, say, .php, you might search (from normal mode) as follows..
(... the leading '/' is what you type in normal mode to start entering a search pattern. I wildcarded the '//' in the URL with '..' because I can't recall if '//' will affect the search operation. The beauty is, I don't have to remember. As long as my search pattern is precise enough to catch all occurrences I need to change, and not match patterns I do not want to change, I'm good to go)
Once you hit enter and are positioned at the first occurrence of the URL, you MANUALLY change that URL as desired. For example if you want to change the hostname from 'abcxyz.com' to 'a111b222.com' you could make the edit by typing...
.. this is just one of many ways to edit this. Just make sure it is a normal mode edit, not a command mode edit.
Next, you advance to the next occurrence ('n').
Finally, still in normal mode, you enter some integer that exceeds the number of changes you think need to be made. The integer doesn't have to be exact, it only need be greater than the number of changes to make. You could even use 100000000000 if you really don't know how many changes need to be made. If there were only 20 changes to make, my macro will stop after the 20th occurrence).
Once you've typed the large integer - don't press ENTER - press F8 (or whatever key you've assigned the macro to)
This will change every occurrence of the pattern exactly as you did manually for the first occurrence.
One assumption my mappings assume is that when you press F8 for the first time, you are positioned in the file exactly where you want the first change to be made.
The nice thing about the repeat previous edit operator is it isn't restricted to a particular type of edit. It can change 1 character, 1 word, to the end of a line, to the start of a line, an entire paragraph, etc.
So, again, the idea is you make your manual change one time - it matters not if you change a word, 5 words, half a line, 7 lines ... the repeat-last-edit operator remembers this.
Then you search for the next occurrence to be changed, make sure the cursor is at the proper location (e.g., if you're changing an entire URL, make sure the cursor is at the start of "http://" rather than in the middle of the URL) and then press 10000F8.
Change the integer higher if you have more than 10,000 occurrences.
The downside of this is performance. But that only becomes an issue when you have truly massive numbers of edits to make (for me, over 10,000 changes can be slow but tolerable. over 100,000 can take a very long time and reverting back to :s is advisable - but your mileage may vary)
Another downside, as has been pointed out by others, is that I haven't done away with wildcards, although I have done away with escapes. But finding out what needs to be wildcarded is very easy if
set incsearch is in your vimrc. This feature highlights matched text as you type your search pattern. When live feedback stops highlighting anything, you know your pattern is wrong - usually because of a character that needs to be escaped. I prefer to replace the character with a '.' as a catch-all place holder (just because I find it simpler to type, but using an escape is OK as well)