Usuń z bieżącej pozycji kursora do podanego numeru linii w edytorze vi

108

Jak usunąć blok tekstu z bieżącego wiersza kursora do wiersza o podanym numerze w vi?

Na przykład:

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

W Vimie zwykle używałbym do tego trybu wizualnego wyboru, ale nie mam Vima do dyspozycji na tym serwerze. W niektórych przypadkach szybsze byłoby również określenie numeru wiersza niż liczenie, ile wierszy znajduje się w bloku.

seanhodges
źródło
Związane z: vi.stackexchange.com/questions/1915/…
J. Chomel,

Odpowiedzi:

210

Możesz użyć czegoś takiego jak d63Gusuwanie z bieżącej linii do linii 63.

cnicutar
źródło
5
Oooh, rozwiązanie w trybie normalnym - jeszcze lepsze!
seanhodges
50
Aby dodać do tego, jeśli chcesz usunąć linie od 45 do 64, wykonaj: 45,64d
ThinkCode
110

Aby usunąć od a do b użyj

:a,bd

od prądu do b użytkowania

:,bd

(gdzie a i b w kodzie są zastąpione Twoimi liczbami)

żałosne
źródło
1
Doskonały. Udało mi się wykonać „:., 63d”, aby wykonać powyższy przykład usuwania. Dzięki żałosne!
seanhodges
13

Taka sama jak zaakceptowana odpowiedź, ale nieco szybsza do wpisania:

d63gg usuwa z bieżącego wiersza do wiersza 63.

apostl3pol
źródło
8

Po co liczyć wiersze? Przejdź do ostatniej linii, którą chcesz usunąć, i zaznacz ją, wpisując, maco „oznacza” ją identyfikatorem „a”. Następnie przejdź do pierwszego wiersza, który chcesz usunąć, i wpisz d'atekst do usunięcia, aby zaznaczyć „a”. Bam!

Gary_W
źródło
Nie działa (vim 7.4.160, CentOS). Być może potrzebuje jakiegoś rozszerzenia lub specjalnej konfiguracji.
Niemiec Khokhlov
6

Aby usunąć blok linii w Vi:

n: pochodzi z numeru linii

m: Jest do numeru linii

  1. Od bieżącej linii do danego numeru linii-

    :,md

  2. od / do określonych numerów linii

    :n,md

SteveScm
źródło