Je veux joindre toutes les lignes d'un fichier en une seule ligne. Quelle est la manière la plus simple de procéder? J'ai eu de la malchance à utiliser la substitution (\r\n
ou \n
ne semble pas être détecté correctement dans le cas de s/\r\n//
sous Windows). L'utilisation de J
dans une expression de plage ne semble pas non plus fonctionner (probablement parce que la plage n'est plus synchronisée après l'exécution de la première commande).
J'ai essayé :1,$norm! J
mais cela n'a fait que la moitié du fichier - ce qui est logique car il ne joint qu'une seule fois chaque ligne.
Ah, j'ai trouvé la réponse.
:1,$join
Fonctionne comme un charme.
EDIT : Comme indiqué dans le commentaire:
:%join -or- :%j
... supprime la plage.
Autrement:
ggVGJ
"ggVG
" sélectionne visuellement toutes les lignes et "J
" les joint.
Vous pouvez le faire avec 3 frappes à partir du mode normal:
:%j
:
entre en mode commande%
fait référence à toutes les lignes du fichierj
exécute la commande joinMaintenant, il semble que cela ajoute un espace entre les lignes. Je ne sais pas si vous le souhaitez.
Vous pouvez le faire en trois frappes de moins:
:1,$j
n'est-ce pas génial?
Manière cryptique:
qqqqqJ@qq@q
(les trois premiers q
effacent le registre q
, le qqJ@qq
enregistre une macro dans le registre q
qui effectue une jointure, puis appelle q
et le dernier @q
l'exécute.
Je suis surpris que personne n’ait mentionné l’autre façon:
:%s/\n/ /
Je suis également surpris que personne n'ait signalé que la plage 1,$
a un raccourci qui est écrit %
.
(Cela ne fait pas la même chose que de joindre les lignes, mais en fonction des circonstances, cela peut en fait être plus approprié.)