Vim eliminar líneas en blanco

674

¿Qué comando puedo ejecutar para eliminar líneas en blanco en Vim?

casi_ hora de comer
fuente

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)

soulmerge
fuente
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.

casi_ hora de comer
fuente
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
53
:v/./d

o

:g/^$/d

o

:%!cat -s
mandaleeka
fuente
77
Buen truco con: v /./d (más fácil de escribir) pero luego debes hacer un: nohl después.
Claes Mogren
1
@ClaesMogren o simplemente rebotar en control-l
JM3
66
@zladuric según vim.wikia.com/wiki/Power_of_g es reVerse global (por lo que hace el comando en todo lo que no coincide)
adam_0
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
Draemon
fuente
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

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

Qué tal si:

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

fuente
5

trabajar con perl en vim:

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

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

Esto funciona para mi

:%s/^\s*$\n//gc

allenhwkim
fuente
Yo uso algo similar::%s/^\n//gc
Clint Pachl
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>
SergioAraujo
fuente
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

Lento
fuente
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!

cn8341
fuente
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/^^^^.*
MisterW
fuente
2

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

akp
fuente
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.

usuario1481441
fuente