Tous en ligne !

Je vous rassure tout de suite, il ne s'agit pas d'un nouveau délire à faire pendant le HellFest. Quoique. Non, aujourd'hui il s'agit seulement d'assembler toutes les lignes d’un fichier en une seule ligne grâce à vim.

Comme souvent avec vim il existe plusieurs moyens. À ma connaissance, moyen le plus rapide en nombre de touches est :%j. Les deux points font passer en mode commande, le pour cent est le raccourci pour 1,$ qui indeek que la commande va concerner toutes les lignes du fichier, et le j est le raccourci pour la commande join. Une forme plus explicite est :1,$join.

On peut aussi s’en tirer en étendant la commande interactive J qui joint la ligne courante et la suivante. Par exemple, au début du fichier on peut taper 18J s’il y a 18 lignes dans le fichier. C’est encore mieux de sélectionner toutes les lignes avec vG et de regrouper avec J. Si on ajoute la commande pour aller au début du fichier ça donne ggvGJ.

Les moyens précédents laissent tous un espace entre chaque ligne. Pour rabouter les lignes sans aucun espace, une bonne vielle substitution convient. Genre :%s/\n// ou encore mieux :%s,\n,, qui utilise une correspondance exacte plutôt que des regexp.


Merci à NLS de m’avoir aiguillé sur tous ces trucs :)

2 commentaires:

Unknown a dit…

C'est cool, mais alors si je veux une commande VIM qui fasse le contraire: qui remet les retours chariot enlevés...

Bon ok je ---> []

Metallurgeek a dit…

Walot, eh trop facile : tu tapes U et ça fait undo.

Sinon, encore pire :%s/\(.\)/\1\r/g

Alors la ça te remet *tous* les retours chariot enlevés... et aussi *plein* de retours chariot supplémentaires. Un entre chaque caractère en fait : le bonheur :)