Reputation: 44091
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
Reputation: 11800
Type :set number
(for numbered lines).
Upvotes: 6
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
Reputation:
Commands listed for use in normal mode (prefix with : for command mode).
Tested in Vim.
By line amount:
By line numbers:
Backwards range given, OK to swap (y/n)?
Upvotes: 22
Reputation: 117
To delete all the lines use - ESC gg dG To delete few lines lets say 5 then use ESC 5dd
Upvotes: 0
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
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
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
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
Reputation: 91
d5d "cuts" five lines
I usually just throw the number in the middle like:
d7l = delete 7 letters
Upvotes: 9
Reputation: 10311
I find this easier
https://superuser.com/questions/170795/how-can-i-select-and-delete-lines-of-text-in-vi
Upvotes: 201
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