web-dev-qa-db-fra.com

Vim efface les lignes vierges

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

650
nearly_lunchtime
:g/^$/d

:g exécutera une commande sur les lignes qui correspondent à une expression régulière. L'expression régulière est une "ligne vide" et la commande est :d (supprimer)

1185
soulmerge

Je l'ai trouvé, c'est:

g/^\s*$/d

Source: Puissance de g sur vim wikia

Brève explication de :g

:[range]g/pattern/cmd

Ceci agit sur le [plage] spécifié (fichier entier par défaut), en exécutant la commande Ex cmd pour chaque ligne correspondant pattern (une commande Ex est une commande commençant par deux points, telle que :d pour la suppression). Avant d'exécuter cmd , "." est défini sur la ligne en cours.

175
nearly_lunchtime
:v/./d

ou

:g/^$/d

ou

:%!cat -s
50
mandaleeka

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
42
Draemon
  1. comment supprimer toutes les lignes vierges

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

    (faites ceci plusieurs fois avec toutes les lignes vides partis)

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

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

    (faites ceci plusieurs fois)

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

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

    (faites ceci plusieurs fois)

pour entrer ^ M, je dois control-Q et control-M dans Windows

14
gauge00

Que diriez-vous:

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

Cette fonction ne supprime que deux lignes vides ou plus, 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>
5
SergioAraujo

Ça marche pour moi

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

5
allenhwkim

travailler avec Perl in vim:

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

5
niejieqiang

J'ai essayé quelques réponses sur cette page, mais beaucoup d'entre elles n'ont pas fonctionné pour moi. Peut-être parce que j'utilise Vim sous Windows 7 (ne vous moquez pas, ayez 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 Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines

4
Pokey
: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 fichier .vimrc, puis redémarrez votre vim. Si vous utilisez la commande: 5,12DBL, toutes les lignes vides entre la 5ème et la 12ème lignes seront supprimées. Je pense que ma réponse est la meilleure réponse!

3
cn8341

Presse delete touche en mode insertion pour supprimer les lignes vides.

3
akp

Si quelque chose a un double interligne dans votre texte, cette commande supprimera le double espacement et fusionnera les lignes vides répétitives préexistantes en une seule ligne vierge. Il utilise un séparateur temporaire de ^^^ en début de ligne, donc si cela entre en conflit avec votre contenu, choisissez autre chose. Les lignes contenant uniquement des espaces sont traitées comme des blancs.

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

Cela a fonctionné pour moi:

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

Il supprime fondamentalement toutes les lignes sans numéro ni lettre. Comme tous les éléments de ma liste avaient des lettres, toutes les lignes vides étaient effacées.

1
user1481441