Supposons que vous ayez tapé un long document dans vim avec un saut de ligne automatique, de sorte que toutes les lignes ont été coupées, disons, avec 79 caractères. Vous avez peut-être même appliqué une mise en forme à l'ensemble du document pour couper toutes les lignes à cette longueur.
Les paragraphes sont délimités dans votre document par des lignes vides.
Vous décidez maintenant de ne plus vouloir de sauts de ligne dans les paragraphes.
Comment pouvez-vous supprimer tous les sauts de ligne dans les paragraphes sans éliminer complètement les limites des paragraphes?
J'ai fait ce hack rapide et idiot, mais je cherche la bonne façon.
:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ - join all lines in the file
:%s/@@@@@/\r\r/g - replace @@@@@ with line breaks
vim
newlines
carriage-return
dggoldst
la source
la source
Réponses:
Je pense que cela fait ce que vous voulez: assurez-vous qu'il y a une ligne vide à la fin du fichier, puis joignez chaque paragraphe (terminé par une ligne vide).
Explication: commencez par aller à la fin du fichier et ajoutez une ligne vide supplémentaire avec
:a
(peut-être qu'il existe une façon plus élégante de le faire; de manière interactive, vous pouvez remplacer les trois premières lignes paro<ESC>
). Ensuite, pour chaque ligne non vide qui n'a pas encore été prise en compte (:g/^./
), appliquez lajoin
commande à la plage commençant à la ligne sélectionnée (.
) et se terminant une ligne avant la ligne vide suivante (/^$/-1
).Facultativement,
:g/^$/d
si vous ne voulez pas qu'il reste de ligne vierge (vous pouvez alors enlever le-1
).la source
:g
, qui applique une commande à toutes les lignes correspondantes; voir:help :g
et peut -:g
être ce fil sur la façon dont se comporte lorsque vous supprimez des sauts de ligne .:$pu _
à la fin, mettez le registre des trous noirs, ce qui entraîne une ligne vierge à la fin.Cela devrait le faire:
tw
est défini sur une valeur au moins aussi grande que le nombre de caractères dans le paragraphe le plus long.gg
déplace le curseur sur la première ligne;gq
est la commande de reformater;G
déplace le curseur sur la dernière ligne, indiquantgq
de reformater de l'emplacement actuel du curseur à la dernière ligne.la source
Placez le curseur à l'intérieur du paragraphe souhaité
Type:
vipJ
(
vip
met en surbrillance le paragraphe actuel,J
joint toutes les lignes)la source
Ce n'est peut-être pas la façon la plus propre de le faire, mais voici ce que j'utiliserais:
( Travaux dans VIM 7.2. )
En fonction de la façon exacte dont les paragraphes ont été divisés lors de leur mise en forme d'origine, vous pouvez remplacer la
gJ
commande (joindre sans espaces) par laJ
commande (joindre avec des espaces).Le
999
nombre arbitraire ne doit être qu'au moins le nombre de paragraphes dans le fichier - vous pouvez sélectionner un plus grand nombre si vous le souhaitez et ne perdre que des cycles de processeur. En supposant une et une seule ligne vide entre les paragraphes, vous pouvez obtenir un nombre de paragraphes plus précis en utilisant:la source