2009-08-10 38 views

risposta

52

Nella modalità normale:

G100kdgg 

In altre parole:

G  -> go to last line 
100k -> go up 100 lines 
dgg -> delete to top of file 
+0

semplice ed elegante. Mi piace! – technomalogical

+0

Questo non funziona se il buffer ha meno di 100 righe. Cancellerà erroneamente tutte le linee perché la parte '100k' non avrà alcun effetto. –

+1

@DonCruickshank Sbagliato, se ci sono meno di 100 righe, '100k' andrà alla prima riga e' dgg' cancellerà quella singola linea. '' K' viene ripetuto per '100' volte, quindi anche se ci sono solo 5 righe, esso" sbatterà "la parte superiore del buffer e quindi si fermerà. Non esegue un controllo preliminare prima di eseguire tutte le azioni. Detto questo, sì, cancellerà erroneamente 1 riga se nel buffer ci sono 100 o meno righe. Ma IMO, questo è un uso più idiomatico di vim rispetto all'altra risposta altamente upvoted: è una "frase" di comandi multipli, piuttosto che uno solo più criptico. – Izkata

49

In modalità ex:

:1,$-100d 

Spiegazione: ":" mette l'editor in "modalità ex" . Il comando d di ex mode cancella le linee, specificate come un singolo numero di riga o un intervallo di linee. $ è l'ultima riga e l'aritmetica può essere applicata ai numeri di riga.

+3

FWIW questa è la risposta migliore, IMHO –

11

Una soluzione alternativa di uso generale:

:%!tail -100 

È possibile utilizzare qualsiasi comando shell dopo la ! modificare arbitrariamente il buffer corrente. Vim avvia il comando e invia il file corrente a stdin e legge il nuovo buffer da stdout.

Problemi correlati