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.
Antworten:
Sie können so etwas wie
d63G
Löschen aus der aktuellen Zeile bis Zeile 63 verwenden.quelle
Zum Löschen von a nach b verwenden
von aktuell bis b verwenden
(wobei a und b im Code durch Ihre Nummern ersetzt werden)
quelle
Entspricht der akzeptierten Antwort, ist jedoch etwas schneller einzugeben:
d63gg
wird aus der aktuellen Zeile in Zeile 63 gelöscht.quelle
Warum Linien zählen? Gehen Sie zur letzten Zeile, die Sie löschen möchten, und markieren Sie sie, indem Sie eingeben,
ma
welche sie mit der Kennung "a" "markiert". Gehen Sie dann zur obersten Zeile, die Sie löschen möchten, und geben Sied'a
"Löschen" ein, um "a" zu markieren. Bam!quelle
So löschen Sie einen Zeilenblock in Vi:
n
: ist von der Zeilennummerm
: ist zur ZeilennummerVon der aktuellen Zeile bis zu einer bestimmten Zeilennummer
:,md
von / zu bestimmten Zeilennummern
:n,md
quelle