Eliminar de la posición actual del cursor a un número de línea determinado en el editor vi

108

¿Cómo elimino un bloque de texto de la fila actual del cursor a un número de línea dado en vi?

Por ejemplo:

 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%">

En Vim, normalmente usaría el modo de selección visual para esto, pero no tengo Vim a mi disposición en este servidor. También sería más rápido especificar un número de línea en lugar de contar cuántas líneas hay dentro del bloque en algunos casos.

seanhodges
fuente

Respuestas:

210

Podría usar algo como d63Geliminar de la línea actual hasta la línea 63.

cnicutar
fuente
5
Oooh, una solución en modo normal, ¡incluso mejor!
seanhodges
50
Para agregar a esto, si desea eliminar las líneas 45 a 64, haga: 45,64d
ThinkCode
110

Para eliminar de a a b use

:a,bd

de la corriente a b uso

:,bd

(donde a y b en el código se reemplazan por sus números)

aburrido
fuente
1
Excelente. Pude hacer ":., 63d" para realizar el ejemplo de eliminación anterior. Gracias borrible!
seanhodges
13

Igual que la respuesta aceptada, pero un poco más rápido de escribir:

d63gg elimina de la línea actual a la línea 63.

apostl3pol
fuente
8

¿Por qué contar líneas? Vaya a la última línea que desea eliminar y márquela escribiendo maque la "marca" con el identificador "a". Luego suba a la línea superior que desea eliminar y escriba d'apara eliminar para marcar "a". ¡Bam!

Gary_W
fuente
No funciona (vim 7.4.160, CentOS). Quizás necesite alguna extensión o configuración especial.
German Khokhlov
6

Para eliminar un bloque de líneas en Vi:

n: es del número de línea

m: Es a número de línea

  1. Desde la línea actual hasta un número de línea dado-

    :,md

  2. desde / hacia números de línea específicos

    :n,md

SteveScm
fuente