Couper, copier et coller dans VIM

Couper, copier et coller dans VIM

Couper, copier et coller dans VIM fait partie des fonctionnalités de bases que nous avons besoin pour manipuler le contenu de nos fichiers.

Dans cet article nous allons voir comment nous pouvons à l’aide des commandes de vim effectuer simplement et rapidement ces différentes opérations. Si vous n’avez encore jamais mis les mains sur ce logiciel, je vous invite à consulter le précédent article qui vous explique comment démarrer simplement avec « Vim ».

Introduction

Vim est un éditeur de texte en ligne de commande ce qui implique qu’il est conçu pour être complètement pilotable au clavier. Il inclut bien un support de la souris qui est intéressant lorsque nous l’utilisons dans une fenêtre de terminal, mais nous allons ici nous concentrer sur les commandes clavier dont nous avons besoin.

Pour ce faire, je vous propose de démarrer avec un fichier page.html dont voici le contenu:

HTML
<html>
        <head>
                <meta charset="utf-8">
                <title>Page HTML basique</title>
        </head>
        <body>
                <h1>Simple page HTML</h1>
                <p>Ceci est une simple page HTML sans grand intéret.</p>
                <h2>Liste à puce</h2>
                <ul>
                        <li>Premier élément</li>
                        <li>Second élément</li>
                        <li>Troisième élément</li>
                </ul>
                <h2>Liste numérotée</h2>
                <ol>
                        <li>Premier élément numéroté</li>
                        <li>Second élément numéroté</li>
                        <li>Troisième élément numéroté</li>
                </ol>
        </body>
</html>

Nous allons l’utiliser pour illustrer le fonctionnement des commandes classiques que sont les couper, copier et coller.

Le première chose à faire est bien entendu d’ouvrir le fichier avec Vim:

Bash
vim page.html
fichier ouvert dans vim

Vous noterez que Vim nous apporte déjà une aide précieuse, la coloration syntaxique. Cette fonction est souvent activée par défaut si Vim reconnait le type de fichier (généralement sur base de son extension).

La pratique…

Plutôt que de mémoriser des tableaux de commandes, nous allons directement expérimenter, étape par étape, les opérations essentielles que sont les couper, copier et coller dans Vim.

Supprimer une ligne…

Nous voudrions ici supprimer le dernier élément de la liste numérotée. La premier chose à faire est de positionner le curseur sur cette ligne (peu importe ou exactement), ce que nous pouvons faire en utilisant les flèches du clavier (ce n’est pas la seule méthode, mais n’oublions pas que nous expérimentons les bases sans avoir envie de tout mémoriser d’abord).

Ensuite il suffit de taper la commande dd (coupe/efface la ligne sur laquelle se trouve le curseur).

Remarque: il faut absolument être en mode de commande. Pour en savoir plus à ce sujet, vous pouvez lire le précédent article qui explique comment démarrer simplement avec Vim.

supprimer/couper une ligne

Concrètement la ligne est copier en mémoire et supprimée du fichier, ce qui nous donne le résultat suivant:

résultat de la suppression

Oups! Annulons la dernière commande…

Vim garde en mémoire les dernières opérations effectuées, ce qui permet à tout moment de revenir en arrière (undo). Il suffit d’utiliser la commande u.

annuler la dernière action

Nous retrouvons alors notre fichier tel qu’il était avant l’effacement de la ligne.

fichier d'origine

Effacer plusieurs lignes

Pour effacer/couper plusieurs lignes d’un coup, il suffit de positionner son curseur sur la première ligne et d’utiliser la commande dd précédée du nombre de lignes. Par exemple 5dd effacera 5 lignes à partir du curseur.

Essayons maintenant de supprimer toute la liste ordonnée d’un coup, pour celà nous devons positionner notre curseur sur la première ligne de la liste et supprimer les 5 lignes qui la composent avec la commande 5dd.

supprimer / couper 5 lignes

Ce qui nous donne le résultat suivant…

résultat de la suppression

Coller le contenu en mémoire

Nous l’avons dit précédemment, la commande dd copie le texte en mémoire et le supprimer du fichier, nous pouvons donc bien sût coller ce texte ailleurs dans le fichier. Pour cela il suffit de positionner le curseur sur une ligne de référence et d’utiliser la commande p (minuscule) pour coller après la ligne ou la commande P (majuscule) pour coller avant la ligne.

Essayons maintenant de coller le texte que nous avons effacé entre le titre « Liste à puce » et la liste elle-même. Nous allons donc positionner le curseur sur la ligne du titre et utiliser la commande p.

coller le texte en mémoire après la ligne actuelle

Le texte est alors collé à l’endroit souhaité.

résultat après avoir collé le texte.

Notez que le texte collé est toujours en mémoire et que vous pouvez répéter l’opération plusieurs fois sans problème.

Copier du texte

Jusqu’ici nous avons effacé ou coupé du texte. Nous pouvons appliquer la même logique pour simplement le copier (et donc le laisser en place dans le fichier). Pour cela nous pouvons utiliser la commande yy (yank) pour copier la ligne courante ou même précéder la commande du nombre de ligne pour copier plusieurs lignes d’un coup.

Essayons donc de copier le petit paragraphe de texte et de le coller en dessous du dernier titre. Nous devons donc positionner le curseur sur la ligne du paragraphe, utiliser la commande yy, ensuite positionner le curseur sur la ligne du dernier titre et utiliser la commande p.

Copier la ligne courante
coller le texte copié en mémoire

Nous obtenons alors le résultat suivant:

le texte en mémoire est collé sous le curseur

Copier plusieurs lignes

Même principe pour plusieurs lignes, si nous utilisons la commande 2yy par exemple, nous copions les deux lignes depuis le curseur.

Essayons donc de copier le dernier titre ainsi que la ligne de paragraphe et collons le tout deux fois avant la balise de fin body.

Nous allons donc positionner notre curseur sur le dernier titre, utiliser la commande 2dd, ensuite positionner notre curseur sur la balise de fermeture body et utiliser la commande 2P (coller deux fois avant le curseur).

Nous obtenons alors le résultat suivant:

Récapitulatif

Récapitulons brièvement ce que nous avons utilisé:

CommandeDescription
ddEfface la ligne courante et stocke le texte en mémoire.
xddEfface et stocke en mémoire x lignes. (où x est un nombre).
yyCopie la ligne courante en mémoire.
xyyCopie x ligne en mémoire. (où x est un nombre).
uAnnule la dernière commande.
pColle le contenu en mémoire après la ligne courante.
xpColle x fois le contenu en mémoire après la ligne courante.
PColle le contenu en mémoire avant la ligne courante.
xPColle x fois le contenu en mémoire avant la ligne courante.

Conclusion

Couper, copier et coller dans Vim sont des opérations extrêmement fréquentes et très simple à effectuer. Nous avons vu ici les concept de bases de ces opérations, mais il est possible d’encore aller plus loin. Par exemple il est possible d’intervertir deux ligne avec la commande ddp. En effet, dd efface la ligne, ce qui positionne le curseur sur la suivante et p colle la ligne effacée juste après. Essayez, vous verrez, c’est tellement pratique!

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.