Vim elimina le righe vuote


674

Quale comando posso eseguire per rimuovere le righe vuote in Vim?

Risposte:


1233
:g/^$/d

:geseguirà un comando su righe che corrispondono a una regex. La regex è 'riga vuota' e il comando è :d(elimina)


38
Grazie soulmerge. Questa è la mia risposta preferita, poiché in realtà spiega cosa fa il comando: g.
Tim Swast,

4
Ciò eliminerà tutte le righe vuote (non contengono alcun carattere di spazio bianco ..), ma potrebbe non essere il requisito univoco. Qualcuno potrebbe ancora mantenere una riga vuota. :%!cat -spotrebbe essere la scelta ..
coanor

2
: g / ^ \ s * $ / d con una regex di 'qualsiasi possibile carattere spaziale' nella riga
oyd11

180

Trovato, è:

g/^\s*$/d

Fonte: potenza di ge vim wikia

Breve spiegazione di :g

:[range]g/pattern/cmd

Questo agisce sull'intervallo [ specificato ] (file intero predefinito), eseguendo il comando Ex cmd per ogni modello di corrispondenza riga (un comando Ex è uno che inizia con due punti come :dper eliminare). Prima di eseguire cmd , " ." è impostato sulla riga corrente.


9
Bello. Ma non esattamente una riga vuota.
innaM

13
Ah, sì, corrisponderà a righe contenenti solo caratteri di spazi bianchi. Accetterò la risposta di Soulmerge.
quasi_lunchtime

16
che dovrebbe corrispondere a righe vuote E righe composte solo da spazi bianchi ... (* corrisponde a zero o più istanze di \ s ...)?
monojohnny,

14
Direi che lo spazio bianco puro È ESATTAMENTE una linea vuota, mentre nessuno spazio è più una linea vuota, non credi? ;)
Kasapo il

4
Oxford afferma che uno spazio vuoto è "uno spazio lasciato da riempire in un documento". Interpretalo come puoi, ma questo è esattamente quello che stavo cercando. Grazie!
Joe Tricarico,


44

Quanto segue può essere utilizzato per rimuovere solo più righe vuote (riducendole a una singola riga vuota) e lasciando intatte singole righe vuote:

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

3
Qualcuno potrebbe spiegare cosa significano i token? (Quindi, come funziona?) Grazie.
PAStheLoD

5
\_$indica la fine della linea che può essere utilizzata all'interno di un modello ( $può essere utilizzata solo alla fine del modello.) Lo stesso è con \_^ciò significa l'inizio di una linea e può essere utilizzata in qualsiasi punto all'interno del modello. Quindi, il modello corrisponde a una linea vuota, una nuova riga e di nuovo una linea vuota. Vedi la pagina di aiuto di Vim regex .
Wiktor Stribiżew,

1
Un altro modo di fare lo stesso::g/^$/,/./-j
SergioAraujo,

14
  1. come rimuovere tutte le righe vuote

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

    (fallo più volte utilizzando tutte le righe vuote sparite)

  2. come rimuovere tutte le righe vuote lasciando SINGOLA linea vuota

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

    (fallo più volte)

  3. come rimuovere tutte le righe vuote lasciando DUE righe vuote AL MASSIMO,

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

    (fallo più volte)

per inserire ^ M, devo controllare-Q e control-M in Windows


2
Puoi anche usare \ral posto del Ctrl-M.
dash-tom-bang

6

Che ne dite di:

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

5

lavorare con perl in vim:

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


Il mio perl potrebbe essere un po 'ruggine, ma non farebbe chompanche il lavoro?
Mark K Cowan,


5

Questa funzione rimuove solo due o più righe vuote, inserisce le righe sottostanti nel tuo vimrc, quindi usa \ d per chiamare la funzione

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

Ho provato alcune delle risposte in questa pagina, ma molte non hanno funzionato per me. Forse perché sto usando Vim su Windows 7 (non deridere, abbi solo pietà di me: p)?

Ecco il più semplice che ho trovato che funziona su Vim in Windows 7:

:v/\S/d

Ecco una risposta più lunga su 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

incolla

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

nel tuo .vimrc, quindi riavvia il tuo vim. se usi il comando: 5,12DBL eliminerà tutte le righe vuote tra la 5a e la 12a fila. Penso che la mia risposta sia la migliore risposta!


Quando pubblichi risposte, aggiungi e spiegazioni descrivendo cosa hai cambiato o aggiunto o come funziona o qualcosa del genere. Anche se la tua risposta potrebbe essere la soluzione, è probabile che alcune persone che leggono questo non capiscano cosa significhi o come funzioni. E per favore fallo in inglese.
Tim

Non importa davvero qui. Questa domanda ha accettato una risposta 5 anni fa
Tim

Penso che la risposta di soulmerge: g / ^ $ / d non sia la migliore risposta e modifico per migliorare la sua risposta con: g / ^ \ s * $ / d. ma perché non riesco a guardare la mia modifica in "mostra tutte le modifiche a questa posa"?
cn8341

La mia risposta è migliore della sua risposta, e chi ha rifiutato la mia risposta e perché la mia risposta è stata respinta?
CN8341

2

Se qualcosa ha una doppia spaziatura nel testo, questo comando rimuoverà la doppia spaziatura e unirà le righe vuote ripetute preesistenti in un'unica riga vuota. Usa un delimitatore temporaneo di ^^^ all'inizio di una riga, quindi se questo si scontra con il tuo contenuto scegli qualcos'altro. Le righe contenenti solo spazi bianchi vengono considerate vuote.

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

2

Premere il deletetasto in modalità inserimento per rimuovere le righe vuote.


1

Questo ha funzionato per me:

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

Elimina sostanzialmente tutte le righe che non hanno un numero o una lettera. Poiché tutti gli elementi del mio elenco avevano lettere, ha eliminato tutte le righe vuote.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.