How To Delete Line In Vi/Vim?

Vi or vim provides different commands for operations. One of these operations is deleting the line. Vi or vim provides different commands to delete single or more lines in different ways.

Delete Current Line

The command to delete the current line in Vi/Vim is dd keys. The current line is the cursor’s current location. But the dd command should be called in the normal mode which accepts commands. Before issuing the dd command press the ESC key to be sure you are in normal mode.

  • Press ESC
  • Type dd
dd

Pressing the dd keys multiple times delete multiple lines.

Delete Multiple Lines

The dd command can be also used to delete multiple lines. The number of lines should be specified before the dd command. The delete operation is applied after the cursor location. The following command will delete 3 lines after the cursor’s current location. But before issuing 3dd command press ESC to change to normal mode.

3dd

Delete Specified Lines or Range of Lines

The d command can be used to delete multiple lines for the specified range. The range will be specified with the line numbers where the start and end line numbers for deletion will be provided. First, we will change to the command mode with the ESC key. then type the following command in order to delete lines from 12 to 18.

:12,18d

Also following line specifiers can be used to set start and end lines according to the line numbers.

  • . specifies the current line.
  • $ specifies the last line.
  • % specifies all lines.

Take a look at the following examples.

CommandDescription
:.,20dDelete from the current line to line number 20.
:40,$dDelete from line number 40 to the last line.
:.,$dDelete from the current line to the end of the file.

Delete From Current Line To The Begging of File

We can delete from the current line where the cursor is located to the beginning of the file with the following command.

  • Press ESC
  • Run dgg

Delete From Current Line To The End of File

We can delete from the current line where the cursor is located to the end of the file with the following command.

  • Press ESC
  • Run :.,$d

Delete All Lines

All lines can be deleted by using the % specifier. In this case, you do not need to know the line numbers, the cursor number, etc. Just use the following command where a single line number specifier % will be provided.

%d

Delete Lines Containing Specified String Pattern or Regex

Another useful case to delete lines in vi/vim is deleting lines those contain specified string pattern or regex. Every line containing the specified string pattern or regex is deleted by searched from the start of the file to the end of the file. The syntax is like below where the PATTERN is the string pattern or regex.

Delete All Lines Containing Given String

:g/PATTERN/d

In the following example, we delete all lines that contain the string “linuxtect”.

:g/linuxtect/d

Delete All Lines Those Do Not Contains Given String

In the following example, we reverse the deletion and delete lines that do not contain the string “linuxtect”. The ! sign is used for the reverse matches.

:g!/linuxtect/d

Delete All Lines Containing IP Address

In the following example, we remove all lines that do not contain an IP address.

:g!/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/d

Remove All Blank Lines

The following Vim/Vi command removes all blank lines.

:g/^\s*$/d

Leave a Comment