Как удалить несколько строк в vi?
Я попытался выполнить следующее:
Как удалить выделенный текст в редакторе VI
но
5dd
дает
E492: Не команда редактора: 5dd
Затем я попытался:
5d
Которая удаляет только одну строку. Как удалить несколько строк?
Ответы
Ответ 1
Похоже, что вы вводите команды в командном режиме (иначе "Ex-режим" ). В этом контексте :5d
удалит строку 5, ничего больше. Для 5dd
работать по назначению, т.е. Удалить пять последовательных строк, начинающихся с курсора, - ввести его в нормальном режиме и не префикс команд с помощью :
.
Ответ 2
Я нахожу это проще
- Go VISUAL mode Shift + v
- Выберите строки
- d для удаления
https://superuser.com/questions/170795/how-can-i-select-and-delete-lines-of-text-in-vi
Ответ 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
- Esc для выхода из режима вставки
- : 1 enter перейти к строке 1 (заменить "1" на строку, которая вас интересует)
- 5 d d удалить 5 строк (из текущей строки)
Тип :set number
(для пронумерованных строк).