VI (vi aïe) l'éditeur des vrais ohms ...      13.04.2005    Phil

Pour en savoir plus : http://www.vim.org et le man de VI

Omniprésent sur l'ensemble des systèmes X même fonctionnant en mode console minimum, vi est l'éditeur le plus pratique qui soit (simple et basique) pour modifier ou créer rapidement des fichiers de configuration pour votre OS préféré.

Avant de commencer il faut savoir que :

- pour utiliser vi, 7 commandes suffisent... surtout ne pas chercher à apprendre toutes les autres d'un coup, ça vient tout seul au fur et à mesure des besoins.

- avec vi la rapidité vient lorsque l'on maîtrise environ 30 commandes... c'est pas la mer à boire.

Le 7 de base :

1) Pour ouvrir un fichier dans vi il faut ouvrir un terminal et taper
vi chemin/monfichier

2) Vi fonctionne en deux modes bien distincts : le mode "commandes" pour passer des commandes et le mode "insertion" pour saisir du texte.
Pour saisir du texte, passer en mode insertion en pressant la touche "Insert", on peut ensuite taper du texte normalement, et se déplacer avec les touches flèches.

3) Pour effacer, utiliser la touche "Delete" (qui de plus fait revenir en mode commande) pour effacer caractère par caractère.

4) Pour exécuter une commande il faut changer de mode en pressant la touche "Escape" (on revient ainsi en mode "Commande"). Les touches pressées ne produisent plus de caractères mais transmettent des commandes qui s'éxecutent lorsque l'on frappe "Enter".

5) La commande la plus importante est write (=enregistrer), elle est introduite en saisissant d'abord le signe : (deux points) suivi de la lettre w , taper ensuite "Enter" pour exécuter.
:w "Enter" write (=enregistrer)

6) Pour quitter : utiliser "quit", introduit par la séquence :q
:q "Enter" quitter
N.B. toutes les commandes sont suivies de la frappe "Enter" pour déclencher l'exécution.
Les commandes peuvent se combiner de cette manière :
:wq enregistrer et quitter.

7) le signe ! se combine entre autres à :w et :q ainsi
:w! force l'enregistrement d'un fichier malgré l'absence de droits d'écriture
:q! quitte sans enregistrer les modifications

Le 7 de base est donc formé de Insert, Delete, Escape, :w , :q , ! et les flèches ce qui suffit pour faire ses premiers pas et réussir ses premières modifications de fichiers de configuration.

Les 90 suivantes :

Aide de vi
:help aide de vi
:se all pour afficher toutes les options

Commandes de fichiers
:n fichier ouvre le fichier "fichier"
:sh lance un shell, exit referme le shell et retourne au fichier
:file nom enregistre le fichier courant sous le nom "nom"
:x,ywfichier enregistre les lignes x à y dans un fichier "fichier"
:x,yw>>fichier enregistre les lignes x à y à la fin du fichier "fichier"
:e! recharge le fichier dans son état à l'ouverture
:r fichier insère le contenu du fichier "fichier" à l'emplacement du curseur
:%!sort trie le fichier en cours

Se déplacer dans le fichier
Après quelques essais il apparaît vite que le 7 de base est un peu juste pour travailler efficacement et rapidement.
Aussi il devient intéressant de savoir se déplacer plus vite dans le fichier ... par exemple en utilisant les touches "Page Up" et "Page Down" pour faire défiler le texte verticalement.

D'autre part il faut savoir qu'en certaines circonstances, les touches flèches ne fonctionnent pas... (par exemple dans une session Telnet), il est donc nécessaire de connaître des commandes de déplacement plus sophistiquées.

les commandes de déplacement par lignes
A retenir la touche 0 (zéro) qui place au début de ligne (position 0) et $ en fin de ligne.
0 début de ligne
$ fin de ligne

H place le curseur au début de la première ligne visible dans l'écran
M place le curseur sur la ligne du milieu de la partie visible de l'écran
L place le curseur au début de la dernière (Last) ligne visible dans l'écran
G place le curseur au début de la dernière ligne du fichier
nG déplace à la ligne n

les touches j et k provoquent un déplacement vertical similaire à l'aspect de la lettre :
j descend (même colonne)
k monte (même colonne)
z positionne la ligne courante en haut de l'écran

les commandes de déplacement par caractères
et les touches h et l déplacent d'un caractère du coté où elles sont placées
h vers la gauche
l vers la droite
n| aller à la colonne n

déplacement par mots
w avance d'un mot
b recule (back) d'un mot
nb ou nw déplace de n mots vers la gauche ou la droite
e va à la fin (end) du mot

déplacement au numéro de ligne
:n va à la nième ligne
nG va à la nième ligne

afficher/masquer les numéros de ligne
:set number affiche les numéros de ligne
:set nonumber masque les numéros de ligne

Editer
i insère du texte avant le curseur (passe en mode édition)
a appond du texte après le curseur (passe en mode édition)
A appond du texte à la fin de la ligne (passe en mode édition)
O ouvre la ligne au dessus du curseur (passe en mode édition)
o ouvre la ligne au dessous du curseur (passe en mode édition)
rx remplace le caractère sous le curseur par la lettre x
J appond la ligne suivante à la fin de la ligne courante
nJ supprime n retours à la ligne depuis la ligne courante

Effacer
X efface le caractère derrière le curseur
x efface le caractère après le curseur
nx efface n caractères depuis le curseur
D efface la partie de la ligne après le curseur
dd efface toute la ligne
ndd efface n lignes depuis la ligne courante
dw efface le mot sous le curseur
ndw ou ndb efface les n mots suivants ou précédents de puis le mot suivant

d/str efface tout depuis le curseur jusqu'à la première occurence de str
d ' ' efface tout depuis la ligne quittée avec G
:g/^$/d efface toutes les lignes vides

u annule la dernière modification
U restaure la ligne courante

Yank (Copier)
yy yank (copie) la ligne courante
3yy yank (copie) 3 lignes
3yw yank (copie) 3 mots
3yl yank (copie) 3 caractères
y ' ' copie tout depuis la ligne quittée par la commande G

Put (Coller)
p colle (put) le texte (yank ou le buffer) après le curseur
P colle (put) le texte (yank ou le buffer) avant le curseur

Tampon (buffer)
les tampons sont nommés par les lettres ASCII de a à z
"xy copie (yank) le texte dans le tampon x
"xd coupe (delete) le texte et le place dans le buffer x
"xp colle (put) le texte contenu dans le tampon (buffer) x

Rechercher
/mot recherche la prochaine occurence de "mot"
/^string recherche la prochaine ligne commençant par "string"
n saute à l'occurence suivante (next)
y/string copie dans le buffer du caractère courant jusqu'à la prochaine occurence de "string"

Remplacer
vi dispose de commandes de remplacement très puissantes qui permettent de plus d'intégrer les expressions régulières pour la recherche.
rx remplace le caractère sous le curseur par la lettre x
~ remplace les majuscules par des minuscules et vice versa
xp échange le caractère courant avec le suivant

:[x,y]s/str1/str2/[g] remplace entre les lignes x et y (optionnel) la chaîne str1 par str2. L'option g permet de remplacer toutes les occurences. str1 et str2 sont des regexp -> :help regexp et : help :s
:%s/toto/titi/g remplace tous (g) les toto par titi pour l'ensemble du fichier (%)
:1,$s/t[o,i]to/tata/g remplace les occurences de "tito" ou "toto" par "tata"

:x,yg/str/cmd cherche entre lignes x et y les occurences de la chaîne str et leur applique la commande vi "cmd"

:%s/CtrlV CtrlM remplace les CRLF par des LF
: passe en mode ligne
% pour tout le fichier
s substitution
/ début de la chaîne à remplacer
CtrlV force à prendre le caractère suivant comme un caractère et non un caractère de contrôle
CtrlM caractère de "retour charriot" LF


Cette liste est très loin d'être exhaustive, le but de cette contrib n'est pas de recopier le man mais de fournir une "trousse à outils" suffisante pour faire l'essentiel confortablement et rapidement. Pour aller plus loin : http://www.vim.org et le man de VI.

Nota : ViM ente autres améliorations possède la coloration syntaxique.

Nota2 : Pour éditer /etc/sudoers , le fichier de configuration de sudo : utiliser visudo en tant que root.

Bien du plaisir ...