Как я могу удалить несколько строк в VI?
Я попытался следовать следующему:
Как удалить выделенный текст в Редакторе VI
но
5dd
дает
E492: не команда редактора: 5dd
затем я попробовал:
5d
который удаляет только одну строку. Как я могу удалить несколько строк?
10 ответов:
звучит так, как будто вы вводите команды в командном режиме (ака. "Ex mode"). В этом контексте
:5d
удалил бы строку Номер 5, ничего больше. Ибо5dd
чтобы работать по назначению-то есть удалить пять последовательных строк, начиная с курсора-введите его в обычном режиме и не префикс команд с:
.
Я нахожу это легче
- перейти в визуальный режим Shift+v
- выбрать строки
- 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", где '#' обозначает начальный и конечный номера строк, которые должны быть удалены.
если вы предпочитаете метод невизуального режима и подтверждаете номера строк, я хотел бы предложить вам другой простой способ.
пример
Я хочу удалить текст из строки 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)?