Présentation du légendaire éditeur Vi pour ceux qui ne sont pas à l’aise avec les lignes de commande.

Pour ceux qui ne veulent pas lire toute la présentation et accéder directement à la fiche récapitulative, suivre ce lien

Si vous connaissez Linux ou Unix, vous avez sans doute entendu parler de VI (prononcer « vi-aille »),  et vous avez entendu dire « vi-aille, beurk, c’est ch… pénible à utiliser ». C’est pourtant un outil qui, une fois apprivoisé, pourra vous faire gagner pas mal de temps et de confort.).

Honnêtement, VI a été développé en 1976…

Pour vous situer, 1976 c’est l’année où Boney M chantait « Daddy Cool », Johnny chantait « Gabrielle », les Dents de la Mer 1 étaient numéro un au box office, et les voitures ressemblaient à ça :

R14

Ah, et en 1976, un ordinateur, c’était ça :

Ou ça

 

Ou encore ça :

 

Alors forcément, vous pouvez oublier les interfaces graphiques façon Office 2010. Cela dit, pour qu’un logiciel subsiste aussi longtemps, il ne doit pas être si mauvais que ça. En fait, certains unixiens/linuxiens attribuent même à VI le statut de légende.

Bon revenons à notre éditeur ; comme je le disais ci-dessus, il ne faut pas s’attendre à des boutons, des menus déroulants et autre sucrerie visuelle, on est ici en mode texte.

Alors pourquoi utiliser un éditeur qui date d’avant la révolution iranienne ? Parce qu’il est en mode texte, et donc utilisable directement dans un terminal, que ce soit dans votre N9 ou dans un serveur Linux distant.

Et puis, même s’il est très vieux, un outil peut encore être très utile et utilisé ; regardez le feu ou la roue par exemple.

Comment un éditeur en mode texte peut-il marcher me demanderez-vous.

Vi a deux modes de fonctionnement : le mode « Commande », qui est le mode principal, et le mode « insertion », qui est appelé depuis le mode « commande » et quitté via la touche Échappe (Esc)

Entrons dans le vif du sujet.

Pour ouvrir un fichier à éditer, saisir simplement vi [nom du fichier à ouvrir] dans la ligne de commande du terminal.

Si le fichier à ouvrir ne se trouve pas dans le répertoire courant saisir le chemin absolu (complet).

 

Le fichier s’ouvre alors en mode Commande, c’est à dire que vous ne pouvez pas encore modifier le texte car le clavier ne sert qu’à envoyer des instructions à ce moment là.

 

1 -Commençons pas le plus simple : se déplacer dans le texte.

Pour se déplacer dans le texte ouvert, il est possible de se servir des flèches du clavier, mais… souvenez-vous : vi a été développé en 1976, et tous les claviers n’avaient pas les touches flèches à cette époque, donc se servir des flèches peut dans de rares cas ne pas donner les résultats escomptés.

Si cela arrive, pas de panique, il y a d’autres touches assignées

(petite note au passage : en bonne application Unix, vi est sensible aux majuscules et aux minuscules)

j pour aller vers le bas, k pour aller vers le haut

h pour aller vers la gauche, l pour aller vers la droite

Flèches pour VI

 

Se déplacer à droite à gauche, c’est la base, mais il y a encore mieux, il y a des raccourcis :

Sur une même ligne :

0 (touche zéro) : déplace le curseur vers le début de la ligne

$ : déplace le curseur vers la fin de la ligne

w : déplace le curseur vers le début du mot suivant

b : déplace le curseur vers le début du mot précédent

Dans tout le document :

:0+Entrée (deux points suivis d’un zéro, puis touche Enter pour valider) : Déplace le curseur vers la première ligne du document. Peut être remplacé par la combinaison 1G (sans Enter, et en majuscule)

:$+Entrée (deux points suivis du signe Dollars, puis touche Enter pour valider) : Déplace le curseur vers la dernière ligne du fichier. Peut être remplacé par la touche G seule.

:n+Entrée (deux points suivis d’un nombre, puis touche Enter pour valider) : Déplace le curseur vers la ligne n du fichier. Peut être remplacé par la combinaison nG.
Si vous avez l’habitude de vous servir des touches « Page Up » et « Page Down » dans votre éditeur préféré, vi propose une alternative :

[Touche Ctrl]+f : f comme « forward » (vers l’avant en anglais). Avance d’une page

[Touche Ctrl]+b : b comme « backward » (vers l’arrière en anglais). Recule d’une page

[Touche Ctrl]+d : d comme « down » (vers le bas en anglais). Avance d’une demi page

[Touche Ctrl]+u : d comme « up » (vers le haut en anglais). Recule d’une demi page

Pour rafraîchir l’écran, si nécessaire :

[Touche Ctrl]+l ou [Touche Ctrl]+r.

 

Pas encore découragés ? Vous verrez, c’est un peu perturbant au début, mais on s’y fait, et avec l’habitude, ça va bien plus vite qu’avec une souris et un traitement de texte moderne.

Maintenant que l’on a vu comment se déplacer dans un document, il peut être utile de savoir comment modifier celui-ci.

2- Modifier le texte.

Si vous avez testé les commandes ci-dessus, vous avez constaté que le texte ne change pas. C’est parce que l’on est en mode commande. Il faut dire à vi « mon cher vi, je veux modifier le texte qui se trouve sous le curseur, s’il te plait »

Avant de vous présenter les commandes pour modifier le texte, je pense qu’il est important de mentionner la commande u comme Undo (Annuler en anglais).

Vous pouvez annuler la dernière modification uniquement, et la rétablir avec cette même commande u. Il ne sera pas possible d’annuler plusieurs modifications de suite.

Ajouter, insérer du texte :

i (minuscule) : insère du texte juste avant le curseur. Concrètement, vous déplacer le curseur jusqu’à l’endroit où vous souhaitez insérer du texte, pressez la touche i (en minuscule) et vous entrez dans le mode « édition » de vi. Vous pouvez donc écrire le texte à insérer au clavier. Une fois le texte terminé, pressez la touche Échappe pour valider.

I (majuscule) : insère du texte en début de ligne

a (minuscule) : ajoute du texte juste après le curseur

A (majuscule) : ajoute du texte à la fin de la ligne

o (minuscule) : ajoute une nouvelle ligne juste en dessous de celle où se trouve le curseur, et y ouvre le mode édition (toujours échappe pour valider)

O (majuscule) : même chose que ci-dessus, sauf que l’on ajoute une nouvelle ligne au dessus de la ligne courante.

 

Modifier du texte :

Les instructions précédentes permettaient d’ajouter du texte, aucun caractère n’est supprimé ou remplacé. Si par exemple dans un fichier de configuration quelconque vous avez besoin de remplacer « oui » par « non » (ou « yes » par « no »), il sera plus simple d’utiliser les fonctions de remplacement que de supprimer et ajouter ensuite des caractères.

r (minuscule) + un caractère: remplace le caractère sous le curseur par le caractère indiqué juste après le r.

R (majuscule) : Remplace tous les caractères à partir du curseur, jusqu’à validation par la touche échappe.

Par exemple, vous voulez remplacer le mot « mercredi » par le mot « vendredi » ; placez le curseur sous le m, pressez la touche R en majuscule, puis tapez les lettres v-e-n-d, puis validez en appuyant sur la touche échappe.

un peu plus poussé maintenant :

cw : (Change Word) le texte saisi en mode édition remplace uniquement le mot commençant par le caractère sous le curseur.

Un exemple, vouz voulez remplacer le mot « mercredi » par le mot « jeudi », placez le curseur sous le m, tapez la commande cw, le mot sélectionné s’efface,  et vous pouvez saisir le mot « jeudi ». Validez avec échappe

cnw : même chose que l’expression précédente, mais remplace n mots. Par exemple pour remplacer 3 mots par le texte à saisir, il faut utiliser l’instruction c3w.

C (majuscule) : remplace les caractères de la ligne en cours (le curseur revient au début).

cc (minuscules) : remplace la ligne entièrement (supprime le contenu de la ligne en cours).

ncc ou cnc : remplace entièrement (supprime) les n lignes à partir de la ligne courante. 3cc ou c3c pour remplacer 3 lignes

 

On a appris à ajouter du texte, remplacer du texte, reste à…

Supprimer du texte :

x : Supprime uniquement le caractère sous le curseur.

nx : Supprime n caractères à partir du curseur. 5x supprime 5 caractères.

dw : (Delete Word / supprimer mot) supprime le mot entier qui se trouve sous le curseur.

dnw : Supprime n mots à partir du curseur.

D (majuscule) : supprime tout le reste de la ligne à partir du curseur.

dd : supprime toute la ligne en cours.

ndd ou d5d : supprime n lignes à partir du curseur.

Vous êtes toujours là ? Toujours pas découragés ? Aller, encore un petit effort, on approche de la fin.

Fonctions diverses :

On a beau être dans un environnement texte, on peut tout de même faire du copier-coller, même si celui-ci est limité.

yy : copie la ligne courante dans le presse papier (en mémoire)

nyy ou yny : copie n lignes à partir de la ligne courante dans le presse papier

p : (paste) colle le contenu du presse papier juste après la ligne courante.
On peut aussi rechercher du texte :

/[texte à chercher]+Entrée : Rechercher du texte du curseur à la fin du fichier.

?[texte à chercher]+Entrée : Rechercher du texte du curseur au début du fichier.

n : il s’agit bien là de la lettre n, et non pas d’un nombre. Recherche de l’occurrence suivante du texte à chercher.

N (majuscule) : recherche de l’occurrence précédente du texte à chercher.

Bon, nous approchons de la fin maintenant.

 Manipulation de fichiers :

Quelques instructions qui peuvent être utiles et faire gagner du temps.

:r [Fichier à lire] (deux points, suivis de la lettre r en minuscule d’un espace et d’un nom de fichier) + Entrée : (r pour read / lire) insère le contenu du fichier indiqué dans la commande à la suite du curseur dans le fichier courant.

:w (deux points, suivis de la lettre w en minuscule) + Entrée : (w pour write / écrire) Enregistre le fichier en cours.

:w [nom de fichier] (deux points, suivis de la lettre w en minuscule d’un espace et d’un nom de fichier) + Entrée : équivalent de la fonction « enregistre sous ». Enregistre dans le fichier indiqué dans la commande.

:[nombre n], [nombre o]w [nom de fichier] (deux points suivis de de nombres séparés par une virgule suivis de la lettre w, d’un espace et d’un nom de fichier) + Entrée : enregistre les lignes n à o du fichier courant le fichier indiqué dans la commande. Par exemple, si vous ne voulez copier que les lignes 8 à 25 du fichier courant, vous saisirez la commande :8, 25w nouveaufichier.txt et validerez avec la touche Enter.

:w! [un fichier] (deux points, w, point d’exclamation, espace nom d’un fichier) + Entrée : Enregistre le texte courant dans un fichier indiqué, même s’il est en lecture seule (à partir du moment où l’on en est propriétaire).

Maintenant, pour finir, le plus important :

3- Quitter Vi

Il y a plusieurs façon de quitter Vi :

:q (deux points, q)+ Entrée :  Quitte vi si aucune modification n’a été faite. Si des modifications ont été faites, vi en informe l’utilisateur, annule la fermeture, et propose d’utiliser la commande suivante.

:q! (deux points, q et point d’exclamation) + Entrée : Force la fermeture de vi sans enregistrer, même si des modifications ont été faites (elles sont alors ignorées)

: x + Entrée ou : wq + Entrée : Enregistre et quitte vi

Je propose que nous nous arrêtions là pour cette fois, car nous avons fait le tour des principales commandes de vi, et il y en a encore une multitude d’autres, comme par exemple les fonctions de tri, les fonctions rechercher/remplacer, macros, etc. qu’il serait trop long de les décrire ici (si vous êtes arrivés jusque là, c’est déjà pas mal).

Vous pouvez aller chercher sur internet pour une utilisation plus avancée, et je peux vous assurez que vous prendrez plaisir une fois que vous maitriserez cet outil.

Trois liens qui peuvent vous aider (en anglais) :

http://www.infobound.com/vi.html

http://staff.washington.edu/rells/R110/

http://www.viemu.com/vi-vim-cheat-sheet.gif

Forum_LINK


Pour un aspect plus pratique, voici une petite fiche récapitulative :

Vous voulez

Commande

Ouvrir

Fermer

Ouvrir un fichier avec vi

Vi [nom fichier] +Ent

Enregistrer et fermer un vi

:x+Ent  ou  :wq+Ent

Quitter sans enregistrer / forcer la fermeture

:q+Ent  / :q! +Ent

Se déplacer

Vers le bas

j

Vers le haut

k

Vers la gauche

h

Vers la droite

l

Début de ligne

0

Fin de ligne

$

Début du prochain mot

w

Début du mot précédent

b

Première ligne du fichier

:0+Ent  ou 1G

Ligne n

:n+Ent  ou nG

Dernière ligne du fichier

:$ +Ent  ou G

(demi) Page suivante

(ctrl+d) ctrl+f

(demi) Page précédente

(crtl+u) ctrl+b

rafraîchir

Ctrl+l ou Ctrl+r

Annuler / Rétablir

u

Modifier le texte

Insérer du texte après le curseur / en début de ligne

i / I + saisir texte + échappe

Ajouter du texte après le curseur / en fin de ligne

a / A + saisir texte + échappe

Nouvelle ligne avant / après curseur avec du texte

o / O + saisir texte + échappe

Remplacer le caractère sous le curseur

r + nouveau caractère

Remplacer à partir du curseur

R + texte + échappe

Remplacer un mot par du texte

cw + texte + échappe

Remplacer N mots par du texte

cNw + texte + échappe

Remplacer les caractères de la ligne en cours

C + texte + échappe

Supprimer et remplacer la ligne en cours

cc

Supprimer et remplacer N lignes

Ncc ou cNc

Supprimer le caractère sous le curseur

x

Supprimer N caractères

Nx

Supprimer le mot sous le curseur

dw

Supprimer N mots

dNw

Supprimer le reste de la ligne à partir du curseur

D

Supprimer toute la ligne

dd

Supprimer N lignes à partir du curseur

Ndd ou dNd

Copier

coller

Copier la ligne en cours

yy

Copier N lignes

Nyy ou yNy

Coller les lignes copiées après la ligne en cours

p

Rechercher

Chercher du texte vers l’avant

/[texte à chercher]

Chercher du texte vers l’arrière

?[texte à chercher]

Aller à l’occurrence suivante

n

Aller à l’occurrence précédente

N

Fichier

Insérer le contenu d’un fichier

:r [nom fichier] +Ent

Enregistrer (sous)

:w ([nom fichier]) +Ent

Enregistrer sous partiel

:[n° ligne début], [n° ligne fin]w [nom fichier] +Ent

Forcer l’enregistrement (sous)

:w! ([nom fichier]) +Ent

Vladimir

Vladimir

Auteur

Je passe ma vie à développer sous Windows, mais j’ai connu Apple II, les Ataris XE et ST, le Dos, toutes les générations de Mac. Ce que j’aime avec le monde libre, c’est que les possibilités sont infinies à moindre coût.
Vladimir

Les derniers articles par Vladimir (tout voir)

Jolla Application : Ambience Copier
Comment sont gérées les icones et leurs applis par l'UI de Sailfish