Copier des lignes d'un fichier vers un autre
Par Dimitri Robert, jeudi 2 mars 2006 à 23:24 :: Vim :: #108 :: rss
La situation : j'avais deux Vim ouverts (un en root, l'autre nom). Dans le premier (où j'ai un fichier A ouvert) je voulais copier trois lignes d'un fichier ouvert (appelons-le B) seulement dans le second. Insérer un fichier quelconque se fait par la commande :r fichier. Mais je n'ai pas trouvé comment insérer seulement quelques lignes et non tout le fichier.
Il y a bien la solution d'ouvrir le fichier B dans le Vim où A est déjà ouvert. Mais j'aurais bien aimé une solution plus directe.
Finalement j'ai créé un pipe, un fichier particulier dans lequel je peux écrire des données, et le fait de lire le fichier ultérieurement le vide de son contenu. En gros, j'écris un truc, je le lis une fois, je voie les données que j'ai écrite, je le lis une deuxième fois, il n'y a plus rien. On appelle aussi cela un tuyau (traduction de pipe), ça rentre d'un côté et ça sort de l'autre.
Donc, je crée mon pipe (sachant qu'il pourra me resservir ultérieurement) :
mkfifo ~/tuyau
Puis, dans le Vim où B est ouvert, je sélectionne les lignes à copier (V en mode commande pour passer en mode visuel suivi des flèches pour étendre la zone). Ensuite, j'écris cette sélection dans mon tuyau :
:'<,'>w >> ~/tuyau
La commande w (pour write) écrit du contenu dans un fichier. Le double chevron >> indique que l'on ajoute le contenu à un fichier déjà existant. Le marqueur '<,'> symbolise la sélection visuelle. Il est automatiquement inséré par Vim.
Ensuite, vous allez dans le Vim ouvert sur le fichier A puis vous inséré le contenu du tuyau :
:r /home/d/tuyau
Certes, cette manipulation manque certainement d'élégance, voire même d'utilité. Mais je trouve que le mécanisme des tuyaux est un outil trop peu utilisé.
Cependant, si quelqu'un connait une solution plus simple pour lire une plage de lignes d'un fichier sans l'ouvrir, je suis preneur.
Mise à jour 6 mars
sed c'est bien ! La preuve :
:r !sed -n '3,5p' B
Mais je ne désespère pas de trouver encore plus élégant...


Commentaires
1. Le vendredi 3 mars 2006 à 19:33, par nicola
2. Le samedi 4 mars 2006 à 09:24, par Dimitri Robert
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.