web-dev-qa-db-fra.com

Dans Vim, quel est le moyen le plus simple de joindre toutes les lignes d'un fichier en une seule ligne?

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.

55
Jordan Parmer

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.

62
Jordan Parmer

Autrement:

ggVGJ

"ggVG" sélectionne visuellement toutes les lignes et "J" les joint.

130
orip

Vous pouvez le faire avec 3 frappes à partir du mode normal:

:%j
  • : entre en mode commande
  • % fait référence à toutes les lignes du fichier
  • j exécute la commande join

Maintenant, il semble que cela ajoute un espace entre les lignes. Je ne sais pas si vous le souhaitez.

32
Dimi

Vous pouvez le faire en trois frappes de moins:

:1,$j

n'est-ce pas génial?

15
tpgould

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.

9
Josh Lee

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é.)

8
Aristotle Pagaltzis