On Thu 19-Oct-06 2:28am -0600, you wrote: > Bill McCarthy wrote: >> On Wed 18-Oct-06 10:24pm -0600, A.J.Mechelynck wrote: >> >>> Peng Yu wrote: >>>> Hi, >>>> >>>> I have the following file segments. I want to concatenate all the >>>> lines with their next lines, except that it ends with "}}". I want to >>>> use the pattern "\(}}\)[EMAIL PROTECTED]". It seems not working. >>>> >>>> Would you please help me to figure out how to match the lineend without >>>> "}}"? >>>> >>>> Thanks, >>>> Peng >>> To join every line not ending in }} with the following line, use the >>> ":j[oin]" >>> command on every line _not_ matching the pattern /}}$/ which means "two >>> closing braces at end of line". As a cherry on the cake, you can avoid >>> joining >>> the last line in the file (which has no following line): >>> >>> :1,$-1v/}}$/j >>> >>> See >>> :help multi-repeat >>> :help :join >> >> Let's assume those 10 lines in the example were the only >> lines in the buffer. >> >> vglobal will first mark lines 1-3 and 5-9. It will next >> apply the join command to each of those lines. The line >> numbers below refer to these original line numbers. >> >> The join on 1 will join lines 1&2, the no longer existing >> line 2 is skipped, join lines 3&4, join lines 5&6, skip 6, >> join 7&8, skip 8 and, finally, join 9&10. >> >> You end up with 5 lines. The goal is to end with 2 lines. >>
> Hm, I see what you mean. Let's try a variation: > > :1,$-1v/}}$/while getline(".") !~ '}}$' | join | endwhile That could result in an infinite loop if there were no '}}$' in either of the last 2 lines - and an incorrect result if there was no '}}$' in the last line. It would work by replacing: getline(".") !~ '}}$' with: getline(".") !~ '}}$' && line(".") != line("$") -- Best regards, Bill