Как я могу удалить несколько строк в VI?


Я попытался следовать следующему:

Как удалить выделенный текст в Редакторе VI

но

5dd

дает

E492: не команда редактора: 5dd

затем я попробовал:

5d

который удаляет только одну строку. Как я могу удалить несколько строк?

10 85

10 ответов:

звучит так, как будто вы вводите команды в командном режиме (ака. "Ex mode"). В этом контексте :5d удалил бы строку Номер 5, ничего больше. Ибо 5dd чтобы работать по назначению-то есть удалить пять последовательных строк, начиная с курсора-введите его в обычном режиме и не префикс команд с :.

Я нахожу это легче

  1. перейти в визуальный режим Shift+v
  2. выбрать строки
  3. d удалить

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

вы можете удалить несколько (диапазон) строк, Если вы знаете номера строк:

:[start_line_no],[end_line_no]d

Примечание: d означает удалить

здесь
start_line_no-это начальная строка нет, которую вы хотите удалить и end_line_no-это конечная строка, которую вы хотите удалить. Строки между началом и концом, включая начало и конец, будут удалены.

например:

:45,101d

строки между 45 и 101, включая 45 и 101, будут удалены.

нажмите клавишу Esc, чтобы убедиться, что вы находитесь не в режиме редактирования. Поместите курсор на первую строку для удаления. Введите ":5dd". Текущая строка и следующие четыре строки должны быть удалены.

поочередно, если у вас включена нумерация строк...

нажмите клавишу Esc, чтобы убедиться, что вы находитесь не в режиме редактирования. Введите ":#, #d", где '#' обозначает начальный и конечный номера строк, которые должны быть удалены.

d5d "режет" пять строк

Я обычно просто бросаю номер в середине, как:

d7l = удалить 7 букв

если вы предпочитаете метод невизуального режима и подтверждаете номера строк, я хотел бы предложить вам другой простой способ.

пример

Я хочу удалить текст из строки 45 в строку 101.

мой метод предлагает вам ввести команду ниже в командном режиме:

45Gd101G

читаем:

перейти к строке 45 (45G) удалите текст (d) от текущей строки до этот строка 101 (101G).

обратите внимание, что на vim можно использовать gg вместо G.

сравните с ответом @Bonnie Varghese, который является:

:45,101d[enter]

команда выше от его ответа требует 9 раз набрав в том числе введите, где мой ответ требуют 8 - 10 раз набирать. Таким образом, скорость моего метода сравнима.

лично я предпочитаю 45Gd101G over :45,101d потому что мне нравится придерживаться синтаксис команды vi, в данном случае:

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

команды, перечисленные для использования в обычном режиме (с префиксом : в командном режиме).
протестировано в Vim.

по количеству строк:

  • numdd - будут удалены num строки вниз начиная отсчет от текущего положения курсора (например 5dd удалит текущую строку и 4 строки под ней =>удаляет текущую строку и (num-1) строки под ним)
  • numdk - будут удалены num линии вверх от текущей линии и самой текущей линии (например 3dk удалит текущую строку и 3 строки над ней =>удаляет текущую строку и num строки)

по линии номера:

  • dnumG - удалит строки от текущей строки (включительно) до номера строки num (включительно) (например, если курсор находится в строке 5 d2G удалит строки 2-5 включительно)
  • dnumgg - удалит строки от текущей строки (включительно) до номер строки num (включительно) (например, если курсор находится в строке 2 d6gg удалит строки 2-6 включительно)
  • (командный режим только): num1, num2d - удалит строки номер строки num1 (включительно) вплоть до номера строки num2 (включительно). Отмечать: если num1 больше num2 - Vim будет реагировать с Backwards range given, OK to swap (y/n)?

Если вы хотите удалить диапазон после определенного триггера линии, вы можете использовать что-то вроде этого

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

что удаляет 11 строк (включительно) после каждой встречи ^TMPDIR.

Это dxd, а не ddx

Если вы хотите удалить 5 строк, курсор в начало первой строки удалить и d5d

для удаления всех строк используйте-ESC gg dG Чтобы удалить несколько строк, скажем, 5, затем используйте ESC 5dd