Vim eliminar líneas en blanco


Respuestas:


1233
:g/^$/d

:gejecutará un comando en líneas que coinciden con una expresión regular. La expresión regular es 'línea en blanco' y el comando es :d(eliminar)


38
Gracias soulmerge. Esta es mi respuesta favorita, ya que en realidad explica lo que hace el comando: g.
Tim Swast

44
Esto eliminará todas las líneas vacías (no contiene ningún espacio en blanco ...), pero ese puede no ser el requisito único. Alguien todavía puede mantener una de las líneas vacías. :%!cat -spuede ser la opción ..
coanor

2
: g / ^ \ s * $ / d con una expresión regular de 'cualquier posible carácter espacial' en la línea
oyd11

180

Lo encontré, es:

g/^\s*$/d

Fuente: Poder de g en vim wikia

Breve explicación de :g

:[range]g/pattern/cmd

Esto actúa en el [rango] especificado (archivo completo predeterminado), al ejecutar el comando Ex cmd para cada patrón de coincidencia de línea (un comando Ex es uno que comienza con dos puntos, como :dpara eliminar). Antes de ejecutar cmd , " ." se establece en la línea actual.


99
Agradable. Pero no exactamente una línea en blanco.
innaM

13
Ah, sí, esto coincidirá con líneas que contienen solo caracteres de espacio en blanco. Aceptaré la respuesta de soulmerge.
almost_lunchtime

16
que debería coincidir con líneas en blanco Y líneas compuestas solo de espacios en blanco ... (* coincide con cero o múltiples instancias de \ s ...)?
monojohnny

14
Yo diría que el espacio en blanco puro ES EXACTAMENTE una línea en blanco, mientras que ningún espacio en blanco es realmente más que una línea vacía, ¿no crees? ;)
Kasapo

44
Oxford dice que un espacio en blanco es "un espacio para rellenar un documento". Interpreta eso como puedas, pero esto es exactamente lo que estaba buscando. ¡Gracias!
Joe Tricarico


44

Lo siguiente se puede utilizar para eliminar solo líneas en blanco múltiples (reducirlas a una sola línea en blanco) y dejar intactas líneas en blanco:

:g/^\_$\n\_^$/d

3
¿Alguien podría explicar qué significan los tokens? (Entonces, ¿cómo funciona?) Gracias.
PAStheLoD

55
\_$significa el final de línea que se puede usar dentro de un patrón ( $solo se puede usar al final del patrón). Lo mismo ocurre con \_^eso significa el inicio de una línea y se puede usar en cualquier lugar dentro del patrón. Entonces, el patrón coincide con una línea vacía, una nueva línea y nuevamente una línea vacía. Consulte la página de ayuda de Vim regex .
Wiktor Stribiżew

1
Otra forma de hacer lo mismo::g/^$/,/./-j
SergioAraujo

14
  1. cómo eliminar todas las líneas en blanco

    :%s,\n\n,^M,g
    

    (haga esto varias veces util todas las líneas vacías desaparecieron)

  2. cómo eliminar todas las líneas en blanco dejando una línea vacía ÚNICA

    :%s,\n\n\n,^M^M,g
    

    (haz esto varias veces)

  3. cómo eliminar todas las líneas en blanco dejando DOS líneas vacías AL MÁXIMO,

    :%s,\n\n\n\n,^M^M^M,g
    

    (haz esto varias veces)

para ingresar ^ M, tengo que controlar-Q y control-M en Windows


2
También puede usar \ren lugar de Ctrl-M.
dash-tom-bang

6

Qué tal si:

:g/^[ \t]*$/d

5

trabajar con perl en vim:

:%!perl -pi -e s/^\s*$//g


Mi perl puede estar un poco oxidado, pero ¿no chompharía el trabajo también?
Mark K Cowan


5

Esta función solo elimina dos o más líneas en blanco, coloca las líneas a continuación en tu vimrc, luego usa \ d para llamar a la función

fun! DelBlank()
   let _s=@/
   let l = line(".")
   let c = col(".")
   :g/^\n\{2,}/d
   let @/=_s
   call cursor(l, c)
endfun
map <special> <leader>d :keepjumps call DelBlank()<cr>

4

Intenté algunas de las respuestas en esta página, pero muchas de ellas no funcionaron para mí. ¿Tal vez porque estoy usando Vim en Windows 7 (no te burles, solo ten piedad de mí: p)?

Aquí está el más fácil que encontré que funciona en Vim en Windows 7:

:v/\S/d

Aquí hay una respuesta más larga en Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines


3
:g/^\s*$/d
^ begin of a line
\s* at least 0 spaces and as many as possible (greedy)
$ end of a line

pegar

:command -range=% DBL :<line1>,<line2>g/^\s*$/d

en su .vimrc, luego reinicie su vim. si usa el comando: 5,12DBL, eliminará todas las líneas en blanco entre la 5ta y la 12a fila. ¡Creo que mi respuesta es la mejor respuesta!


Cuando publique respuestas, agregue una explicación que describa lo que cambió o agregó o cómo funciona o algo así. Aunque su respuesta sea la solución, es probable que algunas personas que lean esto no entiendan lo que significa o cómo funciona. Y por favor hazlo en inglés.
Tim

Eso realmente no importa aquí. Esta pregunta aceptó una respuesta hace 5 años
Tim

Creo que la respuesta de soulmerge: g / ^ $ / d no es la mejor respuesta. Y edito para mejorar su respuesta con: g / ^ \ s * $ / d. pero ¿por qué no puedo ver mi edición en "mostrar todas las ediciones de esta pose"?
cn8341

Mi respuesta es mejor que su respuesta, y ¿quién rechazó mi respuesta y por qué fue rechazada?
cn8341

2

Si algo tiene un doble espacio entre líneas en su texto, entonces este comando eliminará el doble espacio y combinará líneas en blanco repetitivas preexistentes en una sola línea en blanco. Utiliza un delimitador temporal de ^^^ al comienzo de una línea, por lo que si esto choca con su contenido, elija otra cosa. Las líneas que contienen solo espacios en blanco se tratan como en blanco.

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*

2

Presione la deletetecla en modo de inserción para eliminar líneas en blanco.


1

Esto funcionó para mí:

:%s/^[^a-zA-Z0-9]$\n//ig

Básicamente elimina todas las líneas que no tienen un número o letra. Como todos los elementos de mi lista tenían letras, borró todas las líneas en blanco.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.