Comment aborder vi sans prise de tête !

Par le dans . Marqué comme , , , , , avec 13 Commentaires

Comment aborder vi sans prise de tête !

Dernièrement, j’ai eu besoin d’utiliser un programme que je connaissais depuis un moment, que j’avais déjà testé une fois ou deux (par curiosité), mais sur lequel je ne m’étais encore jamais attardé … Voilà qui est chose faite :)

Vous le connaissez sûrement (ou pas) … c’est un éditeur de texte et son doux nom est : VI.
Il faut prononcer vi-aille pour avoir la classe ^^ (plus d’informations sur sa page Wikipédia)

Certains seront choqués du fait que je n’utilisais pas encore ce programme, mais je préférais utiliser un éditeur de texte tout aussi connu et bien plus « simple » à utiliser quotidiennement … NANO.

Je n’avais jamais fait le premier pas vers VI, car sa réputation le précédait :

  • Complexe à utiliser
  • Difficile à appréhender (période de montée en compétence relativement longue)
  • Littérature abondante certes, mais vu le pavé de la « man page » ça fait peur ^^

Enfin … j’ai finalement fait le premier pas, je vais donc essayer de vous faire mes retours et de vous « pondre » un petit tutoriel listant les principales commandes ET raccourcis qu’il vous faudra {connaître|retenir} si vous aussi vous comptez un jour utiliser cet éditeur de texte que je ne peux qualifier que de SUR-PUISSANT !!

Et puis pour être franc, ce billet me servira également de « pense-bête », donc plutôt que de chercher LE tuto bien rédigé dans les méandres du Net, je le poste sur ma petite parcelle d’Internet histoire d’être sûr de ne pas le perdre.

D’ailleurs, histoire de m’exercer un peu, j’ai décidé de rédiger entièrement cet article sous VI, ce qui est un bon exercice :)

VI kézako ?!

Choix de l'éditeur de texte sur Geektionnerd

Illustration geektionnerd de Simon « Gee » Giraudot – geektionnerd.net/editeur-de-texte

Éditeur visuel et non visuel …

Avant d’aborder VI, je souhaite vous parler d’une notion qu’il vous faut connaître, ne serait-ce que pour votre culture personnelle.

=> Il s’agit de la notion d’éditeur visuel et d’éditeur non visuel.

Un éditeur « non visuel » est un paquet logiciel qui permet l’édition de fichiers texte de manière non graphique. Ce que je veux dire par là, c’est qu’un éditeur de texte non visuel est capable de manipuler des chaînes de caractères présentes dans un fichier sans même afficher à l’écran le contenu de celui-ci …

Voici quelques exemples d’éditeurs de textes non visuel : SED, EX, ED ou encore EDLIN.

Voici maintenant un exemple de commande utilisant le programme SED :

sed -i.backup 's/Nouvelle_Chaine_De_caractère/Chaine_De_caractère/' /chemin/vers/mon/fichier/à/modifier/NomFichier.extension

Détail concernant cette commande :
En gros, si vous exécutez cette commande depuis une console, voici les manipulations que celle-ci va effectuer sans vous afficher le contenu du fichier « NomFichier.extension » à l’écran :
1) On réalise avec « -i.backup » une sauvegarde de « NomFichier.extension » auquel on ajoutera l’extension « .backup » afin de garder la version actuelle du fichier, que l’on souhaite modifier, intacte.
2) Le paramètre ‘s/XXXXXX/YYYYYY/’ permet de remplacer la première occurrence d’une chaine de caractères (ici « Chaine_De_caractère » ou « YYYYYY ») par la chaine de caractères souhaitée (ici « Nouvelle_Chaine_De_caractère » ou « XXXXXX »).

Vous pouvez faire le test, l’exécution de cette commande ne vous retournera aucun résultat (sauf en cas d’erreur) mais soyez en sûr, la modification de votre fichier a bien eu lieu !!

Ce genre d’éditeur de texte est extrêmement pratique lorsque que l’on développe des scripts d’automatisation d’installation de paquets et de leurs fichiers de configuration par exemple.

A la différence d’un éditeur non visuel, si vous utilisez la commande vi NomFichier.extension, celui-ci va afficher à l’écran le contenu du fichier que vous pourrez ensuite modifier selon vos besoins.

Revenons en à VI …

Le paquet Vi est donc … un éditeur visuel (bravo à ceux qui suivent encore ^^), à l’opposé des éditeurs non visuels. Celui-ci, a été écrit par William Joy en 1976, à la base, comme une part de la distribution BSD d’UNIX.

Cet éditeur a ensuite été utilisé par plusieurs entreprises de grande renommée, ce qui a fait de lui un standard sous Unix et ça c’est une bonne nouvelle, car c’est ce qui permet à VI d’être, de nos jours, présent sous toutes les distributions actuelles !!

Trêve de blabla … passons aux choses sérieuses :

Bon pour commencer, il va falloir rester trèèèèèèèèèèès calme lors des premières utilisations de VI, car la première fois que l’on exécute ce paquet, on a tendance à avoir des envies de meurtres et à vouloir mettre le feu à sa machine …

Ce qu’il faut savoir pour commencer ET avant de se lancer :

  • VI ne s’utilise qu’à l’aide de votre clavier … donc oubliez votre souris pour le moment ^^
  • VI est un éditeur dit modal et dispose donc de plusieurs modes de fonctionnement. C’est à dire que selon le mode activé, une même touche peut faire 15 choses différentes …
  • VI nécessite, durant les premières heures d’utilisation, de connaître une technique de relaxation efficace, n’hésitez pas à vous mettre à la méditation ^^
Illustration concernant éditeur de texte sur Geektionnerd

Illustration geektionnerd de Simon « Gee » Giraudot – geektionnerd.net/editeur-de-texte

Les principales commandes à connaître !

L’utilisation des modes de VI :

Pour commencer, il faudra connaître 2 commandes primordiales … La première est la commande « i » qui vous permettra de passer en « mode édition », sans celle-ci, il vous sera impossible d’insérer un caractère dans votre fichier ^^
La seconde … la touche « ESC », elle aussi très importante car elle vous permet de sortir du « mode édition » pour entrer ou repasser en « mode commande » !!

Un exemple concret :
– En mode d’édition, la touche « x » insère le caractère « x » dans le fichier jusque là tout va bien.
– En mode commande, la touche « x » supprime le caractère courant … oula c’est space ça ^^

Les différents modes de VI :

Avant de se lancer et pour bien comprendre le fonctionnement de Vi, je vais vous faire une description des différents modes de fonctionnement dont il dispose :

Le Mode « INSERTION » :

La commande « i » permet l’insertion de caractères avant le caractère courant
La commande « a » permet l’insertion de caractères après le caractère courant
La commande « A » permet l’insertion de caractère à la fin de la ligne courante (très utile ça)

Le Mode « IMMEDIAT » :

Dans le mode « immédiat », il faut savoir que toutes les touches du clavier peuvent être interprétées comme une commande et/ou un début de commande.
Il est également important de savoir que tout chiffre est considéré comme un facteur de répétition de la commande exécutée par la suite.

Principales commandes du mode « immédiat » :

Commandes de gestion :
u Undo : annuler les modifications de la dernière commande.
. Répéter sur la position courante la dernière commande qui ne soit pas un positionnement. Par exemple, si vous avez fait un undo par mégarde, la commande « . » permet d’annuler le undo.
ZZ Sortir de Vi avec sauvegarde dans le fichier courant.
Commandes d’insertion :
i Permet de passer en mode insertion avant le caractère courant.
a Permet de passer en mode insertion après le caractère courant.
A Permet de passer en mode insertion à la fin de la ligne courante.
Commandes de modification :
dd Supprimer la ligne courante et la sauvegarder dans un tampon (ndd supprime n lignes).
P Insérer le tampon devant la position courante.
x Supprimer le caractère sous le curseur.
X Supprimer le caractère avant le curseur.
D Supprimer la fin de ligne.
R Remplacer le caractère par un caractère à partir de la position courante (il est possible de remplacer différents caractères à différentes positions tant que l’on ne stoppe pas la commande avec la touche « ESC »).
J Joindre la ligne qui suit a la ligne courante.
Commandes de positionnement :
Pour vous déplacer dans le fichier, il est possible d’utiliser les flèches la plupart du temps.
NG Se positionner à la ligne de numéro N où N est le nombre indiqué avant G.
Si aucun nombre n’a été indiqué avant, se positionne en fin de fichier.
0 Se positionner en début de ligne.
$ Se positionner en fin de ligne.
Ctrl+f Permet d’avancer d’un écran (Forward).
Ctrl+b Permet de reculer d’un écran (Backward).
m a Marquer la position courante avec le nom « a ».
‘ a Se positionner à la position marque « a ».
/Chaine Permet de lancer une recherche sur la chaîne donnée en paramètre.
/ Les touches « / » + « Entrée » utilisées après une première recherche permettent de relancer une recherche sur la chaîne de caractère précédemment utilisée.
N La touche N permet de relancer une recherche. Plus pratique que le raccourci décrit ci-dessus.

Le mode « COMMANDE » :

Le mode commande permet d’utiliser certaines touches du clavier comme exécuteur de commandes. Pour entrer en mode « commande » si vous êtes en mode « insertion », il suffit d’appuyer sur la touche « ESC ».

Voici une liste des principaux modes de commandes, pour plus d’informations, je vous conseille d’utiliser la commande suivante : man vi

:w Permet de sauvegarder le texte dans le fichier courant (nom de fichier utilisé pour lancer vi).
:q Permet de terminer la session (génère une erreur si le fichier n’a jamais été sauvegardé).
:q! Permet de terminer la session même si le fichier n’a jamais été sauvegardé.

Pour information, les commandes peuvent être additionnées. Par exemple, la commande :wq permet de sauvegarder et de quitter l’application en une seule manipulation.

Illustration Geektionnerd à propos des éditeurs de texte sous GNU/Linux

Illustration geektionnerd de Simon « Gee » Giraudot – geektionnerd.net/editeur-de-texte

Trucs et astuces supplémentaires :

La commande suivante permet de générer une liste des fichiers contenus dans un répertoire :

vi /Chemin/De/Mon/Répertoire/

Cette commande peut être pratique si par exemple on vous demande de lister les fichiers présents dans votre répertoire de travail.
Rien de plus simple pour réaliser cela avec les commandes suivantes :

vi /Mon/Répertoire/De/Travail/
:wq NomDeMaListe (et on valide par "Entrée")

La tasse pense-bête VI, au top pour éviter les trous de mémoire.

Rechercher et remplacer une chaîne de caractère dans un fichier :

La commande suivante permet de rechercher et de remplacer une chaîne donnée en paramètre par le chaine de caractère de votre choix :

s/ExpressionRegulière/Substitution/Option

Où « ExpressionRegulière » est la chaîne de caractère à remplacer
Où « Substitution » remplacera la chaîne de caractère ciblée
Où « Option » peut avoir les valeurs suivantes :

  • « g » qui effectue la substitution pour toutes les occurrences de la ligne.
  • « n1 » qui est le numéro de la ligne courante.
  • « $ » qui est la dernière ligne du fichier.
  • ‘NomMarque qui est la ligne qui sera précédemment marquée avec « m NomMarque ».
  • « Paramètre vide » qui indique alors la ligne courante.

Exécuter une commande externe dans VI :

J’ai découvert cette astuce à l’instant sur le blog php2s.com.

Il est possible d’exécuter une commande de votre système à l’intérieur même de votre session VI. Cela peut être assez pratique, si par exemple vous ne vous souvenez plus du nom d’un de vos fichiers et que vous souhaitez l’appeler depuis le script que vous codez.

En mode « commande » dans VI, utilisez le raccourci :! Commande_A_Executer pour exécuter la commande que vous souhaitez, puis validez par « Entrée » pour revenir à votre session VI.

En voici un exemple :
Je suis dans vi après avoir édité le fichier test_sublimigeek.sh avec la commande suivante :

vi test_sublimigeek.sh

En mode « commande », je tape la commande suivante :

:! ls -alh

Voici ce que me retourne VI :

MacBook-Pro-de-Joel:TestsBashScripting $ vi test_sublimigeek.sh.

total 96
drwxr-xr-x   9 Joel  staff   306B 28 jul 19:20 .
drwxr-xr-x  22 Joel  staff   748B 22 jui 18:39 ..
-rw-r--r--@  1 Joel  staff   6,0K 18 jul 19:01 .DS_Store
-rw-r--r--   1 Joel  staff   4,0K 28 jul 19:20 .test1.txt.swp
-rwxr--r--   1 Joel  staff   183B 20 jui 17:14 CleanFiles_v1.sh
-rw-r--r--   1 Joel  staff    13K 17 jul 08:51 Tuto-VI-Sublimigeek.txt
-rw-r--r--   1 Joel  staff   3,4K 22 jui 19:05 Tuto-VI-Sublimigeek.txt.backup
-rw-r--r--   1 Joel  staff     0B 20 jui 17:15 test.txt
-rw-r--r--   1 Joel  staff   8,6K 20 jui 17:14 test_sublimigeek.sh.

Press ENTER or type command to continue

Et voilà, la commande "ls -alh" qui permet de lister les fichiers contenus dans le répertoire courant a été exécutée depuis VI et je peux retourner via la touche « Entrée » à mon script sans être sorti de mon éditeur préféré :)

S’exercer ludiquement à VI :

Si jamais vous souhaitez vous exercer ludiquement à l’utilisation de VI, j’ai trouvé ce qu’il faut …
En effet, les développeurs de VI ont prévu des tutoriels d’entrainement pour apprendre à utiliser l’ensemble des commandes de leur logiciel et je trouve ça carrément sympathique.

Je vous entends râler au fond de la salle … nianiania … ça va encore être en anglais … et moi, je comprends rien à l’anglais …
Oui ET non … car le tutoriel est disponible pour de nombreuses langues comme par exemple :
– Anglais
– Français
– Espagnol
– Russe avec un fichier Russe en mode utf8 (ils ont pensé à tout)
– Polonais
– Et j’en passe et des meilleures …

Le chemin d’accès à ce répertoire magique peut changer en fonction de votre distribution, mais en gros sous MAC OS X Snow Leopard, je l’ai trouvé ici :

cd /usr/share/vim/vim72/tutor/

Il ne reste plus qu’à vous lancer à l’aventure avec la commande suivante pour la version française :

vi tutor.fr

Ou la commande suivante pour la version anglaise :

vi tutor

Et voilà, avec ça vous avez normalement de quoi vous amuser un petit moment, je vous préviens, ce n’est pas évident de retenir tout ce joyeux bordel et sachez que je ne liste qu’une toute petite partie des commandes existantes !!
Mais une fois que vous aurez les principales commandes en mémoire, je peux vous assurer que vous ne vous passerez plus jamais de Vi, qui est ET restera, un des éditeurs de texte les plus puissants que je connaisse.

Si vous connaissez d’autres commandes et/ou astuces utilisables avec VI, n’hésitez pas à les partager dans les commentaires, j’éditerai alors mon billet (avec WordPress cette fois-ci) pour le mettre à jour :-)

Sur ce, je vous laisse, je retourne éditer mes scripts sous VI et avant de vous quitter, j’ai une petite surprise pour vous !

Un pense-bête graphique déniché sur le site de viemu.com.

Pense-bête graphique VI / VIM

Pense-bête graphique VI / VIM

Sources des images utilisées en illustrations :
– L’image utilisée comme illustration principale de ce billet est un imprime écran du tutoriel de VI en version française réalisé par moi même :)
– Les images servant d’illustrations à trois reprises au cours du billet sont des illustrations tirées du site Geekstionnerd, un site que j’adore lire. Ce site est édité par Simon « Gee » Giraudot, allez y faire un tour, ça vaut le détour : geektionnerd.net
– Le mug VI vient du site suivant : techrepublic.com

Voici la source que j’ai utilisée pour réaliser ce billet :
– Ce billet est basé sur la page du manuel de VI disponible via la commande ‘man vi’ depuis le terminal de votre distribution.

13 Commentaires


  1. Certains se foutaient de ma gueule quand je leur disait que VI était hyper puissant et finalement très pratique d’utilisation.
    1. C’est un vrai plaisir de ne pas avoir à utiliser sa souris.
    2. Quand on a compris le pouvoir du « cw », c’est énorme et tellement pratique (en fait, c’est un exemple, le passage du mode commande au mode édition est juste une idée géniale).
    3. Quelque soit la distrib linux sur laquelle vous tombez, VI sera là, dans un coin.

  2. Tres bon tuto mon grand,
    depuis le temps que je te dis de t’y mettre a vi !
    Petite remarque au passage,
    il manque juste le
    :e pour editer d’autre fichiers,
    :b pour voyager entre les buffers

    et quelques combinaison du style
    :’a,’bs/^/\/*

    pour les programmeurs fous qui commentent à la pelle !

    Mais tres bon tuto, a quand le mc ? mocp ?

    Linux : une question de vi ou de more !

    • Hey salut toi la forme ?

      Merci pour les retours positifs ça fait plaisir ^^
      En effet, il manque encore quelques commandes utiles pour l’utilisation quotdienne de Vi, je pense mettre à jout le billet de temps en temps !!
      Concernant MC (ou MOCP) je ne connais pas du tout cet outil, je mène mon enquête et j’en ferais peut être un article xD
      Merci pour le tuyau !!

      @+

  3. Hello Jo, c’est Lio ! Excellent Tuto, clair et précis, facile ! car maintenant je sais utiliser VI lol

    Ca reste quand même très utile pour les faignants quand on a la flemme de passer par un sftp ou ftp ; car avec VI ou VIM ou autres, là c’est du live edit sur le serveur héhé ^__^

    Même chose, on se moque souvent de moi quand je frappe un script de 900 lignes avec VI (enfin VIM pour moi ;-) ) alors qu’avec GEDIT sous gnome… Enfin…

    Honnêtement, dommage que tu n’as pas fait le tuto avec VIM (la version amélioré de VI <= que je ne supporte pas) Que ce soit sous les BSD ou Distrib's Linux c'est VIM direct ^^

    Mais il est vrai que VI ou VIM sont des éditeurs de textes d'une puissance démesurée aux commandes options incroyablement précises, je travaille à 90% avec VIM pour les configurations systèmes réseaux ou même programmation divers.

    Et comme c'est vendredi (jour de troll), as-tu la commande diff avec vi pour voir les différences entre fichiers ^^ je m'en sers beaucoup avec VIM pour les mises à jours de certain truc exotique :

    vimdiff fichier1 fichier2

    c'est juste un exemple pioché au hasard ^^

    http://www.math.bas.bg/bantchev/vim/vimdiff-clue.png

    • Pour les diff, j’utilise souvent la commande diff directement ou alors le petit logiciel diffmerge qui fonctionne vraiment très bien :)
      Je regarderai si VI propose un diff directement ou non, je t’avoue n’avoir jamais essayé …

  4. De toute façon, je crois mettre mis à VIM il y a 10 ans, c’est pour cette raison que j’ai toujours eu du mal avec VI ; Exemple, je n’ai jamais su faire une simple insertion ciblée avec VI (la Honte)

    Je suis tombé sur ton tuto par hasard, comme je te surveille ^^ ;-)

    Dans tous les cas, vu la facilité à te lire (clarté de tes tutoriels), si je tombe sur une machine sans VIM et que j’ai la flemme, grâce toi, je suis opérationnel pour VI ^^ lol

    • Merci pour ce compliment, je pense que je vais mettre ce tuto à jour car j’ai appris plusieurs manipulations biens pratiques comme se positionner sur un caractère en particulier dans une ligne … Dès que j’ai 5 minutes je m’occupe de ça :)

    • D’ailleurs, je viens de me rendre compte d’une chose … que ce soit sous MAC OS X, sous Debian ou sous Ubuntu, lorsque l’on exécute VI, on utilise en réalité VIM donc mon tutoriel est valable pour les deux logiciels vu que je décris dans la majorité de mon billet les commandes de bases :)

  5. Si sous Debian tu as fait un aptitude remove nano (j’aime pas nano, car quand tu fais un crontab -e par défaut sous debian il s’incruste !!! ) aptitude t’installe VIM en auto (du moins à l’époque, si ça n’a pas changé)

    Ou un aptitude install vim donnera quand tu fais un man vi ou execute vi un

    VIM – Vi IMproved

    ^^

    Bizarre, car pour moi que ce soit sous OpenBSD / Ubuntu ou Debian, j’ai jamais eu VIM d’installé par défaut ? heu ?? Pourquoi Moi………..

    Enfin, en effet, pour les commandes de bases c’est le même principe.

    C’est juste une habitude d’ordre de tapotage avec insert echap touches directionnelles, et je me fais souvent avoir avec VI, je n’y arrive jamais ^^ Ha les habitudes…. :)

    Bon, j’arrête de chipoter, je souffre juste d’une dépendance à VI !

    pardon VIM ^^

    Lio

  6. Pingback : Installer le paquet Rkhunter sur un serveur Debian | Sublimigeek | Geek, Astuces, High Tech et découvertes du Net

  7. Il te manque la commande :x entre :wq et :q!
    ça fait la même chose que :wq, mais en tapant un caractère de moins.

    Au début je trouvais ça futile, mais on s’y met très rapidement, et on finit par se rendre compte qu’il était absurde de taper 50% de plus que le nécessaire !

    • Salut Vivivi,

      Exactement, le raccourci « :x » est réellement utile et permet d’économiser quelques précieuses actions :)
      J’utilise « vim » quotidiennement depuis un moment maintenant et je pense que je pourrais non pas mettre à jour ce billet, mais en publier un (plusieurs) nouveau(x).
      Cet outil est tout simplement surpuissant, il mériterait une catégorie dédiée sur le blog tellement il y a de choses à dire !

      @+

N'hésitez pas, laissez un commentaire — DoFollow activé sur ce site —


« »