1 - Les modes

Vi dispose de différents modes, c'est à dire que les touches que vous utiliserez n'auront pas le même effet si vous êtes dans un mode ou dans un autre.

le mode insertion : c'est avec ce mode que vous allez pouvoir insérer du texte dans votre fichier.
On entre dans ce mode en tapant une touche d'insertion (i I a A o O )
le mode commande : vous pouvez déplacer le curseur dans le texte, et taper un grand nombre de commandes qui vous permettront de multiples opérations, telles que la recherche de chaînes de caractères, leur déplacement, remplacement...
le mode Ex ou ligne de commande : il s'agit des commandes de l'éditeur Ex, qui ne fonctionnent pas tout à fait comme celles de Vi.
Pour entrer en mode Ex, il faut taper : ou /, et les commandes ne sont lancées que lorsque vous tapez [Enter].

Pour en sortir d'un des modes, on tape [Esc], ce qui nous ramène au mode commande.

2 - Premiers pas

Editer, sauvegarder un fichier et quitter

Après avoir ouvert une console, rien de bien compliqué :

$ vi mon_fichier.txt

Votre fichier s'ouvre et remplit presque tout le terminal.
La dernière ligne affiche des informations sur le fichier. C'est ici que nous exécuterons nos commandes.
Pour quitter, tapez la commande :q.
Si mon_fichier.txt n'existait pas encore, il sera créé au lancement. Il faudra l'enregistrer pour qu'il soit sauvegardéavec la commande :w
Si vous avez modifié votre fichier et quitté sans enregistrer. Voici le message d'erreur:

File modified since last complete write; write or use ! to override.

Pour forcer à quitter sans sauvegarder les modifications, on utilise donc :q!

Se déplacer

Ceci peut paraitre un peu stupide mais il faut savoir que vi a été concu alors que les touches de déplacements n'existaient pas

h déplace le curseur d'un caractère à gauche
l déplace le curseur d'un caractère à droite
j déplace le curseur d'une ligne au-dessous
k déplace le curseur d'une ligne au-dessus
$ déplace le curseur sur le dernier caractère de la ligne
0 (zéro) déplace le curseur sur le premier caractère de la ligne

Et d'autres commandes un peu plus performantes :

[Ctrl] + [F] permet d'avancer le curseur d'un écran
[Ctrl] + [B] permet de reculer le curseur d'un écran
G amènera votre curseur sur la dernière ligne du fichier
3G amènera le curseur sur la troisième ligne du fichier
3w ou 3b déplaceront le curseur de trois mots vers la droite ou vers la gauche
3| amènera le curseur à la troisième colonne du fichier

Écrire et corriger

C'est bien beau de savoir se déplacer mais si on insérait du texte.

a insère le caractère après le curseur
i insère le caractère avant le curseur
A insère le texte après le dernier caractère de la ligne courante
I insère le texte au début de la ligne courante
o insère le texte dans une nouvelle ligne au-dessous de la ligne courante
O insère le texte dans une nouvelle ligne au-dessus de la ligne courante

Pour corriger du texte :

x efface le caractère qui se trouve sous le curseur
dw efface les caractères depuis celui qui se trouve sous le curseur et jusqu'au début du mot suivant, espace compris
D efface toute la ligne à partir du caractère sous le curseur
dd efface la ligne courante ; 4dd effacera quatre lignes à partir de la ligne courante
rt remplacera le caractère sous le curseur par le caractère t ; rb le remplacera par b...
C remplace toute la ligne à partir du caractère sous le curseur par ce que vous taperez ensuite, l'insertion devant se terminer par [Esc]
~ changera la casse du caractère sous le curseur : une minuscule deviendra une majuscule, et vice versa.
En cas d'erreur, vous avez aussi la possibilité d'utiliser la commande u pour annuler la dernière modification effectuée dans le texte.

3 - Configurer Vi

Il est possible de savoir à tout moment dans quel mode de fonctionnement de Vi on se trouve !
Pour cela, passez en mode commande, ou vérifiez que vous y êtes en tapant [Esc], et tapez la commande :

:set showmode

Puis, lancez la commande avec [Enter]. À partir de ce moment, et pour toute la session en cours, vous verrez apparaître le mode dans lequel vous vous trouvez à droite de la ligne de commande

Les options de configuration

La commande :set all vous donnera un aperçu de l'ensemble des options de configuration
Avec la commande :set, vous verrez uniquement les options par défaut que vous avez modifiées.

showmode / noshowmode : pour activer ou désactiver l'affichage du mode dans lequel on se trouve
verbose / noverbose : par défaut, transforme le bip sonore par défaut par un message
number / nonumber : cette option permet de numéroter les lignes du fichier
wrapscan / nowrapscan : permet de continuer la recherche au déut du fichier
showmatch / noshowmatch : permet à chaque fois que vous fermez une accolade ou une parenthèse, de mettre en surbrillance l'accolade ou la parenthèse d'ouverture correspondante, pendant quelques secondes.

Rendre les modifications permanentes

Les modifications que vous effectuez ne dure que pendant la session.
Pour rendre ces modifications permanentes, il faut créer dans votre répertoire un fichier .exrc%%

$ cd
$ vi .exrc

Il suffit de rentrer les options souhaitées sans les :

set verbose
set showmode
set number

4 - Fonctionnalités avancées

Copier – coller

Vi dispose d'une mémoire tampon dont on peut ensuite copier le contenu là où on le souhaite dans le texte.
La commande yy ou Y copie dans la mémoire tampon la ligne courante et 8yy copie huit lignes à partir de cette même ligne.
La commande P insère le contenu de la mémoire tampon avant la ligne courante, et p l'insère après.

y$ pour copier jusqu'à la fin de la ligne
y8w pour copier huit mots à partir du mot courant

On peut facilement faire un couper-coller ddp effacera la ligne courante et la copiera en dessous de la ligne suivante

Rechercher – remplacer

/chaîne permet de chercher les occurrences de chaîne vers l'avant
?chaîne permet de chercher les occurrences de chaîne vers l'arrière

Pour continuer la recherche dans la même direction, on utilise la commande n pour la poursuivre dans la direction opposée, on utilise N.

On peut aussi remplacer des chaînes de caractères recherchées par d'autres. C'est la commande s qu'on utilisera cette fois.
La syntaxe de base est la suivante :

:s/chaîne_à_remplacer/chaîne_de_remplacement/

Cette commande remplace la première occurrence des caractères spécifiés dans la ligne courante.
On peut spécifier les lignes de 1 à 3 :

:1,3s/chaîne_à_remplacer/chaîne_de_remplacement/

Il est possible aussi de préciser que toutes les occurrences sur une même ligne doivent être remplacées, en ajoutant l'option g :

:s/chaîne_à_remplacer/chaîne_de_remplacement/g

Et voilà ! Il ne reste plus qu'à vous entrainez !

5 - Quelques liens

Un tableau récapitulatif
L'article de Vi sur wikipédia