[CentOS] - OT - VIM - recording

Wed Jul 15 16:01:07 UTC 2009
Charles E Campbell Jr <charles.e.campbell at nasa.gov>

Ed Donahue wrote:
> Is it possible in vim to do the following:
>
> Search for this block of data:
>
>         # Catalog Service 2.0 for uat03
>         <LocationMatch "^/Services/?">
>         PathPrepend /inquiryservices
>         Cluster 172.21.1.1:999
>         </LocationMatch>
>
> And change Cluster 172.21.1.1:9999 to Cluster 172.21.1.2:7000
>
> It needs to have uat03 (or 02, 01) on the line and this line
> 'PathPrepend /inquiryservices' for the Cluster to be changed.
>   
Yes.  Embed following into a file, have cursor above any blocks you want 
changed, and source this:

let uat= search('^\s*#\s*Catalog.*uat0[123]$','W')
if uat
 if getline(uat+1) =~ '<LocationMatch\>'
  let hasprepend = search('^\s*PathPrepend /inquiryservices','Wn')
  let lmend      = search('^\s*</LocationMatch\>','W')
  if lmend && hasprepend
   exe uat+1 "," lmend-1 "s/Cluster 172.21.1.1:9999/Cluster 
172.21.1.2:7000/e"
  endif
 endif
endif

That's a one shot change.  You could wrap this into a function or map 
and call it as often as wished.

I suggest asking vim questions on the vim mailing list, BTW.  See  
http://vim.sourceforge.net/community.php .  You might get a better 
answer than mine there, too.

Regards,
Chip Campbell

-- 
someday I'll have a good signature, I'm sure of it...