Bill McCarthy wrote:
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("$")
Hadn't thought of that. So IIUC our final try is
1,$-1v/}}$/
\ while getline(".") !~ '}}$'
\ && line(".") != line ("$")
\ | join
\ | endwhile
isn't it?
Best regards,
Tony.