Удалить из текущей позиции курсора до заданного номера строки в редакторе vi

108

Как удалить блок текста из текущей строки курсора до заданного номера строки в vi?

Например:

 49 <j:set var="changeSet" value="${build.changeSet}" /> <----- delete from here (cursor position)
 50 <j:if test="${changeSet!=null}">
 51   <j:set var="hadChanges" value="false" />
 52   <TABLE width="100%">
 53     <TR><TD class="bg1" colspan="2"><B>CHANGES</B></TD></TR>
 54     <j:forEach var="cs" items="${changeSet.logs}" varStatus="loop">
 55       <j:set var="hadChanges" value="true" />
 56       <j:set var="aUser" value="${cs.hudsonUser}"/>
 57       <TR>
 58         <TD colspan="2" class="bg2">${spc}Revision <B>${cs.revision}</B> by
 59           <B><j:choose>
 60             <j:when test="${aUser!=null}">${aUser.displayName}: </j:when>
 61             <j:otherwise>${cs.user}: </j:otherwise>
 62           </j:choose></B>
 63           <B>(${cs.msgAnnotated})</B>                <----- to here (line 63)
 64          </TD>
 65       </TR>
 66       <j:forEach var="p" items="${cs.paths}">
 67         <TR>
 68           <TD width="10%">

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

Seanhodges
источник

Ответы:

210

Вы можете использовать что-то вроде d63Gудаления из текущей строки до строки 63.

cnicutar
источник
5
Ооо, решение в обычном режиме - даже лучше!
seanhodges
51
Чтобы добавить к этому, если вы хотите удалить строки с 45 по 64, вы делаете: 45,64d
ThinkCode
110

Чтобы удалить от a до b, используйте

:a,bd

от текущего до b использовать

:,bd

(где a и b в коде заменяются вашими числами)

скучно
источник
1
Превосходно. Мне удалось сделать ":., 63d" для выполнения примера удаления выше. Спасибо, ужасно!
seanhodges
13

То же, что и принятый ответ, но набирать немного быстрее:

d63gg удаляет с текущей строки до строки 63.

апостоль 3пол
источник
8

Зачем считать строки? Перейдите к последней строке, которую вы хотите удалить, и отметьте ее, набрав, maкоторая «отмечает» ее идентификатором «a». Затем перейдите к верхней строке, которую вы хотите удалить, и введите d'aдля удаления до отметки «а». Бац!

Gary_W
источник
Не работает (vim 7.4.160, CentOS). Возможно, потребуется какое-то расширение или особый конфиг.
Герман Хохлов
6

Чтобы удалить блок строк в Vi:

n: от номера строки

m: Это на номер строки

  1. От текущей строки до заданного номера строки -

    :,md

  2. от / до определенных номеров строк

    :n,md

SteveScm
источник