Vim supprimer les lignes vides

674

Quelle commande puis-je exécuter pour supprimer les lignes vides dans Vim?

presque_lunchtime
la source

Réponses:

1233
:g/^$/d

:gexécutera une commande sur les lignes qui correspondent à une expression régulière. Le regex est «ligne vide» et la commande est :d(supprimer)

soulmerge
la source
38
Merci soulmerge. C'est ma réponse préférée, car elle explique en fait ce que fait la commande: g.
Tim Swast
4
Cela supprimera toutes les lignes vides (ne contient aucun caractère d'espace blanc ..), mais cela peut ne pas être l'exigence unique. Quelqu'un peut toujours garder une ligne vide. :%!cat -speut être le choix ..
coanor
2
: g / ^ \ s * $ / d avec une expression régulière de 'tout espace possible char' dans la ligne
oyd11
180

Je l'ai trouvé, c'est:

g/^\s*$/d

Source: Puissance de g à vim wikia

Brève explication de :g

:[range]g/pattern/cmd

Cela agit sur la [plage] spécifiée (fichier entier par défaut), en exécutant la commande Ex cmd pour chaque modèle de correspondance de ligne (une commande Ex est une commençant par un deux-points comme :dpour supprimer). Avant d'exécuter cmd , " ." est défini sur la ligne actuelle.

presque_lunchtime
la source
9
Agréable. Mais pas exactement une ligne vierge.
innaM
13
Ah, oui, cela correspondra aux lignes contenant uniquement des espaces. J'accepte la réponse de soulmerge.
presque_lunchtime le
16
qui doit correspondre à des lignes vides ET des lignes composées uniquement d'espaces blancs ... (* correspond à zéro ou à plusieurs instances de \ s ...)?
monojohnny
14
Je dirais que les blancs purs SONT EXACTEMENT une ligne vierge, alors qu'aucun espace blanc n'est vraiment plus une ligne vide, ne pensez-vous pas? ;)
Kasapo
4
Oxford dit qu'un blanc est "un espace laissé à remplir dans un document". Interprétez cela comme vous pouvez, mais c'est exactement ce que je cherchais. Merci!
Joe Tricarico
53
:v/./d

ou

:g/^$/d

ou

:%!cat -s
mandaleeka
la source
7
Astuce intéressante avec le: v /./ d (plus facile à taper) mais vous devez ensuite faire un: nohl après.
Claes Mogren
1
@ClaesMogren ou tout simplement rebondir sur control-l
jm3
6
@zladuric selon vim.wikia.com/wiki/Power_of_g c'est reVerse global (donc il fait la commande sur tout ce qui ne correspond pas)
adam_0
44

Les éléments suivants peuvent être utilisés pour supprimer uniquement les lignes vierges multiples (les réduire à une seule ligne vierge) et laisser les lignes vierges intactes:

:g/^\_$\n\_^$/d
Draemon
la source
3
Quelqu'un pourrait-il expliquer ce que signifient les jetons? (Alors, comment ça marche?) Merci.
PAStheLoD
5
\_$signifie la fin de ligne qui peut être utilisée à l'intérieur d'un modèle ( $ne peut être utilisée qu'à la fin du modèle.) Il en va de même \_^pour le début d'une ligne et peut être utilisé n'importe où à l'intérieur du modèle. Ainsi, le motif correspond à une ligne vide, une nouvelle ligne et à nouveau une ligne vide. Voir la page d'aide de Vim regex .
Wiktor Stribiżew
1
Une autre façon de faire de même::g/^$/,/./-j
SergioAraujo
14
  1. comment supprimer toutes les lignes vides

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

    (faites cela plusieurs fois, toutes les lignes vides ont disparu)

  2. comment supprimer toutes les lignes vides en laissant SINGLE ligne vide

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

    (faites cela plusieurs fois)

  3. comment supprimer toutes les lignes vides laissant DEUX lignes vides AU MAXIMUM,

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

    (faites cela plusieurs fois)

pour entrer ^ M, je dois contrôler-Q et contrôler-M dans les fenêtres

gauge00
la source
2
Vous pouvez également utiliser \rà la place du Ctrl-M.
dash-tom-bang
6

Que diriez-vous:

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

la source
5

travailler avec perl dans vim:

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

niejieqiang
la source
Mon perl est peut-être un peu rouillé, mais ne ferait pas chompaussi le travail?
Mark K Cowan
5

Ça marche pour moi

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

allenhwkim
la source
J'utilise quelque chose de similaire::%s/^\n//gc
Clint Pachl
5

Cette fonction ne supprime que deux ou plusieurs lignes vides, placez les lignes ci-dessous dans votre vimrc, puis utilisez \ d pour appeler la fonction

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
la source
4

J'ai essayé quelques-unes des réponses sur cette page, mais beaucoup d'entre elles ne fonctionnaient pas pour moi. Peut-être parce que j'utilise Vim sur Windows 7 (ne vous moquez pas, ayez juste pitié de moi: p)?

Voici le plus simple que j'ai trouvé qui fonctionne sur Vim dans Windows 7:

:v/\S/d

Voici une réponse plus longue sur le Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines

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

pâte

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

dans votre .vimrc, puis redémarrez votre vim. si vous utilisez la commande: 5,12DBL, elle supprimera toutes les lignes vides entre la 5e ligne et la 12e ligne. Je pense que ma réponse est la meilleure réponse!

cn8341
la source
Lors de la publication des réponses, veuillez ajouter et une explication décrivant ce que vous avez modifié ou ajouté ou comment cela fonctionne ou quelque chose. Même si votre réponse peut être la solution, il est probable que certaines personnes qui lisent ceci ne comprennent pas ce que cela signifie ni comment cela fonctionne. Et veuillez le faire en anglais.
Tim
Cela n'a pas vraiment d'importance ici. Cette question a accepté une réponse il y a 5 ans
Tim
Je pense que la réponse de soulmerge: g / ^ $ / d n'est pas la meilleure réponse et je modifie pour améliorer sa réponse avec: g / ^ \ s * $ / d. mais pourquoi je ne peux pas regarder mon montage dans "afficher toutes les modifications apportées à cette pose"?
cn8341
Ma réponse est meilleure que sa réponse, et qui a rejeté ma réponse et pourquoi ma réponse a été rejetée?
cn8341
2

Si quelque chose a doublé l'espacement de votre texte, cette commande supprimera le double espacement et fusionnera les lignes blanches répétitives préexistantes en une seule ligne vierge. Il utilise un délimiteur temporaire de ^^^ au début d'une ligne, donc si cela se heurte à votre contenu, choisissez autre chose. Les lignes contenant uniquement des espaces sont traitées comme vides.

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*
MisterW
la source
2

Appuyez sur la deletetouche en mode insertion pour supprimer les lignes vides.

akp
la source
1

Cela a fonctionné pour moi:

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

Il supprime essentiellement toutes les lignes qui n'ont ni chiffre ni lettre. Étant donné que tous les éléments de ma liste avaient des lettres, il a supprimé toutes les lignes vides.

user1481441
la source