vim

How to delete one or more lines below the current line in Vim?


Is there a command to delete one line or several lines that are immediately below the current line in Vim?

Currently, I'm doing it via jdd and then use . to repeat as needed. Is there a command that would combine all these?

The reason I would like to have such command is that I don't like to move away from the current position, yet be able to delete the lines below it.


Solution

  • The delete ex command will work nicely.

    :+,$d
    

    This will delete all the lines from current +1 till the end ($)

    To delete the next 2 lines the follow range would work, +1,+2 or shorthand +,+2

    :+,+2d
    

    As @ib mentioned the :delete or :d command will move the cursor to the start of the line next to the deleted text. (Even with nostartofline set). To overcome this we can issue the `` normal mode command. `` will jump back to the exact position before the last jump, in this case the :d command. Our command is now

    :+,+2denter``

    Or as one ex command

    :+,+2d|norm! ``
    

    To make this easier we wrap this all up in a command:

    command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``
    

    Now to delete the next following 3 lines:

    :3D
    

    This command can also take a {reg} like :delete and :yank do. So deleting the next 4 lines into register a would be:

    :4D a
    

    For more information

    :h :d
    :h :command
    :h :command-register
    :h :command-count
    :h ``