Vim supprimer les lignes vides


674

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

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)


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.


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

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

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


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

6

Que diriez-vous:

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

5

travailler avec perl dans vim:

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


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


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>

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


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!


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/^^^^.*

2

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


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.