How to delete every other line in Vim?
I would like to delete every other line from a Vim buffer, starting with the second one, i.e., lines 2, 4, 6, etc. For example, if the buffer’s contents is:
aaa
bbb
ccc
ddd
eee
fff
then, after the desired line removal, it should become:
aaa
ccc
eee
Which Vim commands can be used to automate this operation?
An elegant (and efficient) way to accomplish the task is to invoke the
:delete
command (see :help :d
) for the +
line range (same as .+1
)
addressing the line following the current one (see :help {address}
), on
every line (see :help /^
) using the :global
command (see :help :g
):
:g/^/+d
You can use a macro for this. Do the following.
- Start in command mode.
- Go to the beginning of the file by pressing
gg
. - Press
qq
. - Click arrow down and press
dd
after. - Press
q
. - Press
10000@q
PS: To go to command mode just press Escape a couple of times.
We can use the :normal
(or :norm
) command to execute
the j
and dd
Normal-mode commands:
:%norm jdd
Source: the Best of Vim Tips page by zzapper.
:map ^o ddj^o
^o
Here ^ stand for CTRL. Recursive macro to delete a line every two line. Choose well your first line and it's done.
from vim mail archive:
:let i=1 | while i <= line('$') | if (i % 2) | exe i . "delete" | endif | let i += 1 | endwhile
(To be typed on one line on the vim command line, will delete row 1,3,5,7,...)