Я попытался выполнить следующее:
Как удалить выделенный текст в редакторе VI
но
5dd
дает
E492: Не команда редактора: 5dd
Затем я попытался:
5d
Которая удаляет только одну строку. Как удалить несколько строк?
Я попытался выполнить следующее:
Как удалить выделенный текст в редакторе VI
но
5dd
дает
E492: Не команда редактора: 5dd
Затем я попытался:
5d
Которая удаляет только одну строку. Как удалить несколько строк?
Похоже, что вы вводите команды в командном режиме (иначе "Ex-режим" ). В этом контексте :5d
удалит строку 5, ничего больше. Для 5dd
работать по назначению, т.е. Удалить пять последовательных строк, начинающихся с курсора, - ввести его в нормальном режиме и не префикс команд с помощью :
.
Я нахожу это проще
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, будут удалены.
Команды, перечисленные для использования в обычном режиме (префикс с : для командного режима).
Проверено в Vim.
По количеству строк:
По номерам строк:
Backwards range given, OK to swap (y/n)?
Нажмите клавишу Esc, чтобы убедиться, что вы не находитесь в режиме редактирования. Поместите курсор на первую строку для удаления. Введите :5dd
. Текущая строка и следующие четыре строки должны быть удалены.
Альтернативно, если у вас включена нумерация строк...
Нажмите клавишу Esc, чтобы убедиться, что вы не находитесь в режиме редактирования. Введите :#,#d
где "#" обозначает номера начальной и конечной строк, которые необходимо удалить.
d5d "разрезает" пять строк
Я обычно просто бросаю число посередине, например:
d7l = удалить 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 |
+---------+----------+--------------------+
Если вы хотите удалить диапазон ПОСЛЕ определенного триггера строки, вы можете использовать что-то вроде этого
:g/^TMPDIR/ :.,+11d
Это удаляет 11 строк (включительно) после каждой встречи ^TMPDIR
.
это dxd, а не ddx
если вы хотите удалить 5 строк, наведите курсор на начало первой строки для удаления и d5d
Чтобы удалить все строки, используйте - ESC gg dG. Чтобы удалить несколько строк, скажем 5, затем используйте ESC 5dd.
Тип :set number
(для пронумерованных строк).