2009-08-10 27 views

Respuesta

52

En el modo normal:

G100kdgg 

En otras palabras:

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

simple y elegante. ¡Me gusta! – technomalogical

+0

Esto no funciona si el buffer tiene menos de 100 líneas. Borrará incorrectamente todas las líneas porque la parte '100k' no tendrá ningún efecto. –

+1

@DonCruickshank Incorrecto, si hay menos de 100 líneas, '100k' irá a la primera línea y' dgg' borrará esa única línea. 'k' se repite' 100' veces, por lo que incluso si solo hay 5 líneas, se "topará" con la parte superior del búfer y luego se detendrá. No realiza una comprobación previa antes de realizar todas las acciones. Dicho eso, sí, borrará incorrectamente 1 línea si tienes 100 o menos líneas en el búfer. Pero la OMI, este es un uso más idiomático de vim que la otra respuesta muy elevada: es una "oración" de múltiples comandos, en lugar de uno más críptico. – Izkata

49

En el modo de ejemplo:

:1,$-100d 

Explicación: ":" pone el editor en modo "ex" . El comando d del modo ex elimina las líneas, especificadas como un número de línea individual o un rango de líneas. $ es la última línea, y la aritmética se puede aplicar a los números de línea.

+3

FWIW esta es la mejor respuesta, en mi humilde opinión –

11

Una solución alternativa de uso general:

:%!tail -100 

Se puede utilizar cualquier comando shell después de la ! modificar arbitrariamente el búfer en uso. Vim inicia el comando y alimenta el archivo actual al stdin, y lee el nuevo búfer de stdout.

Cuestiones relacionadas