deltanovember
deltanovember

Reputation: 44091

How can I delete multiple lines in vi?

I have tried to follow the following:

How to delete selected text in VI editor

but

5dd

gives

E492: Not an editor command: 5dd

I then tried:

5d

Which only deletes a single line. How can I delete multiple lines?

Upvotes: 153

Views: 350713

Answers (11)

JSON C11
JSON C11

Reputation: 11800

  1. Esc to exit insert mode
  2. :1enter go to line 1 (replace '1' with the line you are interested in)
  3. 5dd delete 5 lines (from the current line)

Type :set number (for numbered lines).

Upvotes: 6

Brian S. Wilson
Brian S. Wilson

Reputation: 639

Press the Esc key to make sure your are not in an edit mode. Place the cursor on the first line to be deleted. Enter :5dd. The current line, and the next four lines should be deleted.

Alternately, if you have line numbering turned on...

Press the Esc key to make sure your are not in an edit mode. Enter :#,#d where '#' stands for the beginning and ending line numbers to be deleted.

Upvotes: 7

user8554766
user8554766

Reputation:

Commands listed for use in normal mode (prefix with : for command mode).
Tested in Vim.

By line amount:

  • numdd - will delete num lines DOWN starting count from current cursor position (e.g. 5dd will delete current line and 4 lines under it => deletes current line and (num-1) lines under it)
  • numdk - will delete num lines UP from current line and current line itself (e.g. 3dk will delete current line and 3 lines above it => deletes current line and num lines above it)

By line numbers:

  • dnumG - will delete lines from current line (inclusive) UP to line number num (inclusive) (e.g. if cursor is currently on line 5 d2G will delete lines 2-5 inclusive)
  • dnumgg - will delete lines from current line (inclusive) DOWN to the line number num (inclusive) (e.g. if cursor is currently on line 2 d6gg will delete lines 2-6 inclusive)
  • (command mode only) :num1,num2d - will delete lines line number num1 (inclusive) DOWN to the line number num2 (inclusive). Note: if num1 is greater than num2 — vim will react with Backwards range given, OK to swap (y/n)?

Upvotes: 22

kalariya parikshith
kalariya parikshith

Reputation: 117

To delete all the lines use - ESC gg dG To delete few lines lets say 5 then use ESC 5dd

Upvotes: 0

chris
chris

Reputation: 9

it is dxd, not ddx

if you want to delete 5 lines, cursor to the beginning of the first line to delete and d5d

Upvotes: 0

fronthem
fronthem

Reputation: 4139

If you prefer a non-visual mode method and acknowledge the line numbers, I would like to suggest you an another straightforward way.

Example

I want to delete text from line 45 to line 101.

My method suggests you to type a below command in command-mode:

45Gd101G

It reads:

Go to line 45 (45G) then delete text (d) from the current line to the line 101 (101G).

Note that on vim you might use gg in stead of G.

Compare to the @Bonnie Varghese's answer which is:

:45,101d[enter]

The command above from his answer requires 9 times typing including enter, where my answer require 8 - 10 times typing. Thus, a speed of my method is comparable.

Personally, I myself prefer 45Gd101G over :45,101d because I like to stick to the syntax of the vi's command, in this case is:

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+

Upvotes: 12

Evan Carroll
Evan Carroll

Reputation: 1

If you want to delete a range AFTER a specific line trigger you can use something like this

:g/^TMPDIR/ :.,+11d

That deletes 11 lines (inclusive) after every encounter of ^TMPDIR.

Upvotes: 3

Bonnie Varghese
Bonnie Varghese

Reputation: 2248

You can delete multiple(range) lines if you know the line numbers:

:[start_line_no],[end_line_no]d

Note: d stands for delete

where,
start_line_no is the beginning line no you want to delete and end_line_no is the ending line no you want to delete. The lines between the start and end, including start and end will be deleted.

Eg:

:45,101d

The lines between 45 and 101 including 45 and 101 will be deleted.

Upvotes: 166

Lon
Lon

Reputation: 91

d5d "cuts" five lines

I usually just throw the number in the middle like:

d7l = delete 7 letters

Upvotes: 9

KCD
KCD

Reputation: 10311

I find this easier

  1. Go VISUAL mode Shift+v
  2. Select lines
  3. d to delete

https://superuser.com/questions/170795/how-can-i-select-and-delete-lines-of-text-in-vi

Upvotes: 201

mike3996
mike3996

Reputation: 17537

Sounds like you're entering the commands in command mode (aka. "Ex mode"). In that context :5d would remove line number 5, nothing else. For 5dd to work as intended -- that is, remove five consequent lines starting at the cursor -- enter it in normal mode and don't prefix the commands with :.

Upvotes: 143

Related Questions