Löschen Sie im vi-Editor von der aktuellen Cursorposition auf eine bestimmte Zeilennummer

108

Wie lösche ich einen Textblock aus der aktuellen Cursorzeile zu einer bestimmten Zeilennummer in vi?

Beispielsweise:

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

In Vim würde ich normalerweise den visuellen Auswahlmodus verwenden, aber ich habe Vim auf diesem Server nicht zur Verfügung. In einigen Fällen wäre es auch schneller, eine Zeilennummer anzugeben, als zu zählen, wie viele Zeilen sich innerhalb des Blocks befinden.

Seanhodges
quelle
Siehe auch
J. Chomel

Antworten:

210

Sie können so etwas wie d63GLöschen aus der aktuellen Zeile bis Zeile 63 verwenden.

cnicutar
quelle
5
Oooh, eine Lösung im normalen Modus - noch besser!
Seanhodges
50
Wenn Sie die Zeilen 45 bis 64 löschen möchten, tun Sie Folgendes: 45,64d
ThinkCode
110

Zum Löschen von a nach b verwenden

:a,bd

von aktuell bis b verwenden

:,bd

(wobei a und b im Code durch Ihre Nummern ersetzt werden)

borribel
quelle
1
Ausgezeichnet. Ich konnte ":., 63d" ausführen, um das obige Löschbeispiel auszuführen. Danke borrible!
Seanhodges
13

Entspricht der akzeptierten Antwort, ist jedoch etwas schneller einzugeben:

d63gg wird aus der aktuellen Zeile in Zeile 63 gelöscht.

apostl3pol
quelle
8

Warum Linien zählen? Gehen Sie zur letzten Zeile, die Sie löschen möchten, und markieren Sie sie, indem Sie eingeben, mawelche sie mit der Kennung "a" "markiert". Gehen Sie dann zur obersten Zeile, die Sie löschen möchten, und geben Sie d'a"Löschen" ein, um "a" zu markieren. Bam!

Gary_W
quelle
Funktioniert nicht (vim 7.4.160, CentOS). Vielleicht braucht es eine Erweiterung oder eine spezielle Konfiguration.
Deutscher Khokhlov
6

So löschen Sie einen Zeilenblock in Vi:

n: ist von der Zeilennummer

m: ist zur Zeilennummer

  1. Von der aktuellen Zeile bis zu einer bestimmten Zeilennummer

    :,md

  2. von / zu bestimmten Zeilennummern

    :n,md

SteveScm
quelle