editeur Vi – les bases

vi est l’ancêtre des éditeurs de texte s’utilisant en mode console. S’il ne bénéficie pas de tous les attraits des éditeurs plus récents (gedit, kate, etc), en revanche, une fois bien maîtrisé, il peut être aussi puissant et rapide que ces derniers. Son avantage principal est qu’il est accessible quasiment tout le temps. De plus, il est extrêmement léger et se lance très rapidement.

Pourquoi utiliser vi ?

Il y a plusieurs raisons à cela.

  • vi est disponible sur tous les systèmes Unix/Linux. Si un jour vous deviez intervenir sur une machine exécutant de tels systèmes, vous auriez toujours de quoi éditer TOUS les fichiers de configuration.
  • vi ne nécessite pas d’interface graphique. Imaginons qu’un jour GNOME ou KDE ne se lancent pas. Comment éditer alors le fichier xorg.conf par exemple ?
  • Dernier argument non négligeable, le fait de maîtriser vi vous fera passer soit pour un dinosaure, soit pour un geek fini

    Petite nuance

    En réalité, dans les sytèmes Linux en général, et Fedora en particulier, vi n’est que rarement utilisé. On utilise à la place vim. On peut le constater en tapant :

    La commande devrait afficher plusieurs lignes d’informations, et il vous faudra peut-être remonter en haut de la page pour identifier la version utilisée. Vous devriez ainsi voir une ligne de la forme :

    VIM – Vi IMproved 7.1 (2007 May 12, compiled Jun 27 2007 05:11:06)

    (bien entendu, les numéros de version et dates de compilation peuvent changer en fonction de votre système).

    vim utilise les mêmes bases que vi.

    Comment ça marche ?

    Tout d’abord, il vous faut ouvrir l’éditeur, en tapant

    Si le fichier n’existe pas, alors il sera créé au moment de la sauvegarde.

    Une fois ouvert, vi possède deux modes de fonctionnement bien distincts. C’est un éditeur dit « modal », ce qui veut dire qu’il réagit différemment aux actions de l’utilisateur en fonction du mode dans lequel il se trouve.

    Le mode insertion

    C’est le mode « classique » pour un éditeur. C’est dans ce mode que l’on peut taper sur le clavier pour saisir du texte. Puisque vi démarre en mode commande, vous pouvez accéder au mode insertion en appuyant sur la touche i.

    Le mode commande

    C’est le mode dans lequel l’utilisateur va pouvoir effectuer des commandes, plus ou moins poussées, en utilisant des suites de touches. Contrairement aux éditeurs classiques, il n’utilise pas de combinaisons de touches, et les touches Alt, Ctrl et autres ne seront que très peu utilisées.

    Par défaut, vi démarre dans ce mode.

    Il existe par ailleurs d’autres modes qui seront détaillés plus loin.

    Premiers pas

    Afin de bien comprendre le fonctionnement de vi, faisons-nous la main su un premier essai. Pour cela, il faut ouvrir une console. Tout le reste de cet exemple se fera en mode console.

    • Sous GNOME : Applications → Accessoires → Terminal
    • Sous KDE : Clic droit sur le bureau → Terminal

    Nous allons travailler sur un nouveau fichier. Pour cela, tapons :

    Comme dit plus haut, vi débute par défaut en mode commande. Afin de rentrer en mode insertion, il vous faut taper la lettre i. Les versions les plus récentes de vi vous indiquent dans quel mode vous vous trouvez en affichant en bas de l’écran par exemple INSERTION

    Vous pouvez commencer à saisir votre texte de façon tout à fait normale. Vous pouvez par exemple taper quelque chose d’original, disons « Hello World ! ».

    Pour sortir du mode insertion, il suffit de presser la touche Échap (ou Esc selon les claviers). L’affichage du texte INSERTION devrait disparaitre.

    Maintenant que nous sommes en mode commande, nous allons sauvegarder puis quitter le fichier. Pour cela, nous allons taper la succession de caractères suivants :

    Nous verrons par la suite le détail de ces commandes.

    Vous êtes maintenant revenus à la console. Si vous tapez :

    vous devriez voir

    Notez bien la différence entre les modes commande et insertion. Une fois sorti du mode insertion, les touches tapées au clavier ne servent plus à rentrer du texte, mais à effectuer des actions !

    Modifions cette fois le fichier précédement créé :

    Nous avons à l’écran le contenu de notre fichier. Nous allons modifier le texte.

    Avec les flèches du clavier, déplacez-vous sur le mot « World ». Tapez ensuite la touche R (majuscule). Votre éditeur devrait cette fois afficher REMPLACEMENT en bas de la console.

    Vous pouvez ainsi remplacer « World » par « Monde » par exemple. Tapez ensuite sur Échap pour repasser en mode commande, et saisir la séquence suivante pour sauvegarder et quitter un fichier :

    Le mode commande : détails

    Passage en mode insertion

    Nous avons déjà vu une première commande, la commande i, qui permet de passer en mode insertion sur le curseur. Voici d’autres commandes possibles :

    a -> Active le mode insertion mais un caractère après le curseur
    A -> Active le mode insertion à la fin de la ligne courante
    I -> Insère au début de la ligne
    O ->Insère une ligne au-dessus du curseur et passe en mode insertion
    o -> Insère une ligne au-dessous du curseur et passe en mode insertion

    Comme nous l’avons déjà dit plus haut, la touche Échap permet de quitter le mode insertion

    Remplacement

    Le mode remplacement est similaire au mode insertion, à la différence près qu’il sert à remplacer des caractères. Voici les commandes disponibles.
    r -> Remplace le caractère à la position du curseur par caractère puis repasse en mode commande.
    R -> Remplace tous les caractères jusqu’à la fin de la ligne
    cw -> Remplace uniquement le mot à la position du curseur (efface le reste du mot et passe en mode insertion)
    cnw ->Remplace n mots, avec n un nombre (efface n mots et passe en mode insertion)
    C ->Change le reste de la ligne (efface la fin de la ligne et passe en mode insertion)

    Hormis pour la commande r qui ne remplace qu’un caractère, il faut taper la touche Échap pour revenir au mode commande.

    Suppression

    Maintenant que nous avons vu comment insérer ou remplacer du texte, apprenons à l’effacer !

    x -> Supprime un caractère (celui du curseur)
    dw -> Supprime un mot
    dnw -> Supprime n mots, avec n un nombre
    dd -> Supprime une ligne
    ndd -> Supprime n lignes, avec n un nombre (pratique pour supprimer de grandes quantités de lignes)

    Manipulation des fichiers

    En mode commande, les séquences de manipulation sont toujours précédées du caractère « : ».

    :w -> Sauvegarde le fichier (sans quitter)
    :wq -> Sauvegarde le fichier et quitte vi
    :q -> Quitte vi sans sauver les modifications
    :e! -> Ignore les changements et recharge le fichier
    :q! -> Force vi à se terminer sans sauvegarde du fichier ouvert (ce mode est pratique quand vi émet des alertes, notamment au niveau des droits d’écriture)
    :w!fichier -> Sauvegarde le fichier sous le nom fichier
    :w!fichier -> Remplace le fichier fichier

    Ces premières informations vous permettront de travailler de façon élémentaire sur des fichiers. Toutefois, il existe de nombreuses autres possibilités.

    Se déplacer sur l’écran

    G -> Se positionne à la dernière ligne du fichier
    nG -> Se positionne à la ligne n du fichier
    Ctrl + f -> Descend d’un écran (« f » pour « forward », « en avant » en anglais)%% Ctrl + b -> Remonte d’un écran (« b » pour « back », « en arrière »)
    Ctrl + d -> Descend d’un demi-écran (« d » pour « down », « en bas »)
    Ctrl + u -> Remonte d’un demi-écran (« u » pour « up », « en haut »)
    :. -> Donne le numéro de la ligne courante

    Se déplacer dans le texte

    Une fois que l’on est sur la bonne ligne, grâce au paragraphe précédent, on peut se déplacer dessus grâce aux flèches de direction (les touches Haut et Bas renvoient respectivement vers la ligne précédente et la ligne suivante). Il existe d’autre commandes pour gagner du temps :

    H -> En haut de l’écran (« H » pour « high », « haut » en anglais)
    M -> Au milieu de l’écran (« M » pour « middle », « milieu »)
    L -> En bas de l’écran (« L » pour « low », « bas »)
    h -> Décale d’un caractère vers la gauche (équivalent de la touche Gauche)
    j -> Descend d’une ligne (équivalent de la touche Bas)
    k -> Monte d’une ligne (équivalent de la touche Haut)
    l -> Décale d’un caractère vers la droite (équivalent de la touche Droite)
    O -> Au début de la ligne
    $ -> À la fin de la ligne
    w -> Au début du mot suivant
    e -> À la fin du mot suivant
    b -> Recule d’un mot

    Certaines touches sont redondantes avec les flèches de direction. Il faut se rappeler que vi est un éditeur des plus anciens, et qu’au début de son utilisation, les claviers n’avaient pas forcément de pavé numérique ou de flèches de direction.

    Rechercher du texte

    /chaîne_à_rechercher -> Recherche la chaîne dans le texte, vers le bas
    ?chaîne_à_rechercher -> Recherche la chaîne dans le texte, vers le haut
    n -> Répète la recherche précédente

    Par l’exemple, si l’on cherche la chaîne de caractères register_globals dans le fichier/etc/php.ini, voici la marche à suivre :

    Le fichier est maintenant ouvert sous vi. La commande

    va nous mener sur la première occurence trouvée de register_globals. Pour passer à l’occurence suivante, il suffit de taper la touche n autant de fois que nécessaire pour parvenir à la bonne ligne.

    Il existe également des opérations de remplacement en masse :
    :s/chaîne1/chaîne2/ -> Recherche sur la ligne courante la chaîne chaîne1 et la remplace par la chaîne chaîne2
    :g/chaîne1/s//chaîne2/g ->Recherche dans tous le fichier chaîne1 et la remplace par chaîne2
    :g/chaîne1/s//chaîne2/gc -> Idem, avec confirmation individuelle

    Concrètement, supposons qu’il existe un fichier utilisation_vi.txt. Malheureusement, le rédacteur a fait une faute de frappe au début du fichier. Il a tapé « descripttion » au lieu de « description». Par copier-coller, cette faute se retrouve partout dans le fichier. Pour corriger cela :

    vi utilisation_vi.txt -> On ouvre le fichier utilisation_vi.txt
    :g/descripttion/s//description/g -> On remplace « descripttion » par « description »
    :wq -> On sauvegarde le fichier puis on quitte

    Autre exemple, on a travaillé sur un fichier pour Windows, et tous les chemins sont de la forme c:\dossier\fichier. Nous souhaiterions adapter ce fichier à Linux, en réécrivant les chemins sous la forme /dossier/fichier.

    vi mon fichier.txt -> On ouvre le fichier monfichier.txt
    :g/c:/s//\//g -> On remplace c: par / (« / » étant un caractère spécial, on met un « \ » devant pour qu’il ne soit pas interprété)
    :g/\/s//\//g -> On remplace tous les « \ » par des « / » (idem que ci-dessus)
    :wq -> on sauvegarde le fichier, et on quitte

    Jusque là, rien que ne font les éditeurs classiques… Mais vi est capable aussi de bien d’autres choses ! __:x,y s/chaîne1/chaîne2/g_ -> Recherche de la ligne x à la ligne y l’expression chaîne1 et la remplace par chaîne2

    Bien entendu, si les chaînes contiennent des caractères spéciaux, par exemple un « / », il faut les « échapper », c’est-à-dire les précéder d’un antislash « \ ». De la même façon, si la chaîne à rechercher contient un « \ », il faudra lui aussi l’échapper et donc écrire « \ ».
    Ainsi, si on veut remplacer /test par /toto/ il faudra taper :g/\/test/s//\/toto\/g

    Copier/Coller

    Y -> Copie une ligne (celle où se trouve le curseur)
    nY -> Copie n lignes, avec n un nombre (à partir de celle où se trouve le curseur)
    P -> Colle les lignes avant le curseur
    p -> Colle les lignes après le curseur

    Commandes diverses

    . -> répète la dernière commande saisie
    ncommande -> Répète n fois la commande (exemple : 5x supprime 5 fois le caractère au niveau du curseur)

    Éditer plusieurs fichiers

    Il est possible d’éditer plusieurs fichiers avec vi.
    Pour cela, il suffit, au lancement de vi, de passer en argument la liste des fichiers à éditer :

    vi fichier1 fichier2 fichier3

    ou alors de lui passer une expression rationnelle :

    vi *txt

    Pour passer d’un fichier à l’autre, on utilise les commandes suivantes :

    :n -> Passe au fichier suivant
    :N -> passe au fichier précédent

    Tout ceci ne représente que les commandes de base de vi, à savoir les commandes qui vous permettront d’éditer des fichiers de configuration afin de relancer votre système par exemple.

    vi peut cependant permettre une utilisation beaucoup plus poussée qui pourrait même vous faire regretter les éditeurs visuels.

    == Utilisation avancée de vi ==

    === Copier-coller ===

    Nous avons vu précédemment les techniques de copier-coller classiques. En voici d’autres bien utiles :

    :g/chaîne1/s//chaîne2/g -> Recherche dans tout le fichier la chaîne chaîne1 et la remplace par chaîne2
    :10,20t 100-> Fait un copier-coller des lignes 10 à 20 à la ligne 100
    :10,20m 100 -> Fait un couper-coller des lignes 10 à 20 à la ligne 100
    :10,20y -> Copie (dans le buffer) les lignes 10 à 20
    :100,$m 50 -> Déplace les lignes 100 jusqu’à la fin du fichier à la ligne 50

    Remplacement ===

    Nous avons déjà vu plus haut :

    :g/chaîne1/s//chaîne2/g -> Recherche dans tout le fichier la chaîne chaîne1 et la remplace par chaîne2

    Une variante est :
    :g/chaîne1/s//chaîne2 -> Recherche dans tout le fichier chaîne1 et la remplace par chaîne2, mais une seule fois par ligne (première occurence trouvée de la ligne)

    Il est aussi possible de faire :

    :10,20g/chaîne1/s//chaîne2/g -> |descriptif=Recherche dans les lignes 10 à 20 chaîne1 et la remplace par chaîne2

    Petites astuces

    Dans un fichier de code, si vous appuyez sur la touche %, vi vous amène au premier caractère de bloc trouvé, ouvrant ou fermant (les caractères de blocs reconnus sont « { », « } », « ( » , « ) », « [ », « ] »). Si vous appuyez de nouveau sur %, vi vous amènera au caractère de bloc opposé correspondant (fermant si le premier trouvé est ouvrant, et vice versa). Ceci peut se révèler très pratique pour l’édition de code PHP ou C.

    Conclusion

    vi est un éditeur de texte très puissant, et détailler ici toutes les commandes serait fastidieux et inutile. Je ne saurai que trop vous recommander de commencer à l’apprivoiser petit à petit, avant de rechercher de la documentation plus poussée (par exemple http://www.linuxfocus.org/Francais/May2000/article153.shtml.

Laisser un commentaire