Подтвердить что ты не робот

Как удалить несколько строк в vi?

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

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

но

5dd

дает

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

Затем я попытался:

5d

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

4b9b3361

Ответ 1

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

Ответ 3

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

:[start_line_no],[end_line_no]d

Примечание. d обозначает удаление

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

Например:

:45,101d

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

Ответ 4

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

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

  • num d d - удаляет num строк ВНИЗ, начиная отсчет с текущей позиции курсора (например, 5 d d удаляет текущую строку, а 4 строки под ней => удаляет текущую строку и (num-1) линии под это)
  • num d k - удаляет num строк UP из текущей строки и самой текущей строки (например, 3 d k удаляет текущую строку и 3 строки над ней => удаляет текущую строку и num строк над ней)

По номерам строк:

  • d num G - удаляет строки из текущей строки (включительно) до номера строки num (включительно) (например, если курсор в данный момент находится на строке 5 d 2 G удалит строки 2-5 включительно )
  • d num g g - удаляет строки из текущей строки (включительно) ВНИЗ до номера строки num (включительно) (например, если курсор в данный момент находится на строке 2 d 6 g g удаляю строки 2-6 включительно)
  • (только в командном режиме) : num1 , num2 d - удаляет строки с номером строки num1 (включительно) ВНИЗ до номера строки num2 (включительно). Примечание: если num1 больше, чем num2 - vim будет реагировать с Backwards range given, OK to swap (y/n)?

Ответ 5

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

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

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

Ответ 6

d5d "разрезает" пять строк

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

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

Ответ 7

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

Пример

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

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

45Gd101G

Он гласит:

Перейдите к строке 45 (45G), затем удалите текст (d) с текущей строки до строка 101 (101G).

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

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

:45,101d[enter]

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

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

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

Ответ 8

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

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

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

Ответ 9

это dxd, а не ddx

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

Ответ 10

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

Ответ 11

  1. Esc для выхода из режима вставки
  2. : 1 enter перейти к строке 1 (заменить "1" на строку, которая вас интересует)
  3. 5 d d удалить 5 строк (из текущей строки)

Тип :set number (для пронумерованных строк).