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

Reply via email to