On 2007-03-31, Auro Ashish Saha <[EMAIL PROTECTED]> wrote:
> Hello Antoine,
> 
> Thanks for your post. I tried both the options but i could not get any
> result. I am using gvim. Please help.
> 
> Regards,
> 
> Auro Ashish Saha.
> > Auro Ashish Saha wrote:
> >> Hello,
> >>
> >> Please help me to remove alternate lines from a text file.
> >>
> >> 000000 00000
> >> 123456 99999
> >> 999999 99999
> >> 123445 99999
> >>
> >> I want to delete the line 1, 3, 5 and so on. What are the commands to be
> >> used. Thanks for help in advance.
> >>
> >> Regards,
> >>
> >> Auro Ashish Saha.
> >>
> >>
> >>
> >
> > Method I:
> >
> >     q"ddjjq
> >     <count>@"
> >
> > where <count> is equal to the number of lines still to be deleted

One problem with this is that it attempts to store a sequence of 
normal-mode commands into the " register, which is the unnamed 
register, but then deletes the first line into this same register.

The other problem with it is that it moves the cursor too many 
times:  once the first line has been deleted with dd, the cursor 
automatically moves to the next line, so only one j is needed to get 
to the next line to be deleted.

This version will work:

    qqddjq
    <count>@q

Note that it uses the q register instead of the " register.  Also, 
if you don't want to try to figure out what <count> should be, and 
if you don't want to remove a huge number of lines, you can execute 
the recorded commands the first time after you record them with this 
command:

    @q

and every subsequent time with this command:

    @@

That way, once you've recorded the command and executed it once from 
the q register, you can just hold your finger on the @ key and watch 
the lines disappear.  As you get close to the bottom of your file, 
you can start slowing down and typing just two @'s at a time.

> >
> > Method II (all on one line if typed on the Vim command-line):
> >
> >      :let i=1 | while i <= line('$') | if (i % 2) | exe i . "delete" |
> > endif |
> > endwhile

It looks as though Tony left out part of Method II:  i is never 
incremented.  I modified it as shown below (added "let i += 1 |")and 
verified that it works.

    :let i=1 | while i <= line('$') | if (i % 2) | exe i . "delete" | endif | 
let i += 1 | endwhile

HTH,
Gary

-- 
Gary Johnson                 | Agilent Technologies
[EMAIL PROTECTED]     | Mobile Broadband Division
                             | Spokane, Washington, USA

Reply via email to