Vi/Vim n'est pas un éditeur trivial. Il dispose de commandes ésotériques et fonctionne en 'modes', ce qui n'accroit pas sa facilité d'appréhension.
On le qualifie d'éditeur modal.
Il est souvent opposé à son concurent Emacs ; ces deux éditeurs sont en effets les éditeurs des hackers, geeks et autres développeurs.
Voici quelques éléments de comparaisons rapide entre ces deux éditeurs :
Vi | Emacs |
---|---|
Appréhension difficile. | Prise en main aisée. |
Programme rapide et léger. | Programme complet, de poids moyen. |
Dans les spécifications POSIX. | Programme pas toujours présent de base, mais presque toujours installable. |
Déplacement des doigts réduits et frappe accélérée. | Combinaisons de touches fréquentes, mains sollicités. |
Scriptable. | Nombreux plugins, scriptable en LISP. |
Compacité. | Emacs dispose d'un mode vi-like. |
Vi/Vim fonctionne en mode, c'est à dire que dans chacun de ces modes, l'éditeur se comportera différemment :
Le mode qui va vous intéresser en premier sera très probablement le mode insertion qui correspond à ce que vous avez déja rencontré chez les éditeurs textes traditionnels, c'est le mode qui permet l'édition. Un mode très proche est le mode remplacement.
Le mode normal est le mode des opérations textes. C'est comme si vous aviez la touche [Control] resté enfoncée sur un editeur graphique.
Vous basculez en mode visuel lorsque vous opérer une séléction sur le texte. Sur un éditeur graphique vous obtenez traditionnellement votre séléction (faite à l'aide de la souris ou avec [Shift]) en surbrillance bleu.
Enfin, ke mode ex lance une micro-console qui ouvre la voie a la saisie de commandes en CLI. Les commandes sont compatibles avec celles d'Ex, un viel éditeur hérité d'Unix.
Le changement de mode a proprement parlé est généralement ce qui déroute le plus le néophyte. Nombreuses seront les fois ou vous serez perdu entre les diffèrents modes. Le mieux alors est de revenir au mode normal.
Le mode initial est le mode normal. Pour y revenir, double [Esc] ou, si vous êtes bloqué en mode ex, utilisez la commande :visual
Pour basculer en mode insertion, le plus classique est le célébre [i] mais vous avez également [a] ou [o]. Les majuscules de ces touches fonctionnent également, testez-les !.
La sélection, qui vous fera passer en mode visuel, se fait avec [v], sa majuscule ou même la souris si vous l'avez activée.
Le mode ex s'obtient avec [:] pour une commande simple ou encore avec [Q] pour la saisie de commandes multiples.
La majorité des commandes peuvent être préfixées par des modificateurs qui vont étendre ou préciser le champs d'action de celles-ci.
La plupart des commandes s'appliquent par défaut une seule fois sur la ligne ou le caractère courant.
Pour travailler sur zone autre, ou répéter la commande, il est possible d'utiliser ces préfixes modificateurs.
Ce préfixe sert à répéter plusieurs fois la commande en question. Il s'agit simplement de préfixer la commande par ce nombre.
Si ce nombre n'est pas précisé la commande s'éxécutera une fois.
Symbole : [nombre]
Ce préfixe sert à préciser la zone sur laquelle la commande va agir.
Si cette zone n'est pas précisée, la commande agira sur la ligne courante.
Soit on précise une seule ligne qui est la ligne de zone d'action, soit on précise deux lignes séparées par une virgule
qui sont alors respectivement la ligne de début de zone et la ligne de fin de zone.
Symbole : [zone]
Certains jokers sont disponibles pour identifies certaines lignes particulières
. | Ligne courante |
$ | Dernière ligne |
'>' | Ligne du début de sélection |
'<' | Ligne de fin de fin de sélection |
Le joker %
identifie une zone qui est l'ensemble du tampon courant, ce qui est équivalent à 1,$
<caractère>
Caractère
<min>
Lettre minuscule
<maj>
Lettre majuscule
<chaîne>
Chaîne de caractère
<regex>
Expression rationnelle
<chiffre>
Chiffre
<vi>
Commande vi
<shell>
Commande externe
<fichier>
Fichier
<ligne>
Ligne (numérique)
<colonne>
Colonne (numérique)
i
I
a
A
[nombre]>>
[nombre]<<
:set autoindent
:set noautoindent
[zone]=
^
$
gg
G
f<caractère>
F<caractère>
%
<ligne>G
:<ligne>
<colonne>|
[nombre](espace)
gg
, il permet de sauter à un caractère précis du tampon courant.[nombre]w
[nombre]b
[nombre]x
[nombre]dd
:[zone]D
[nombre]Y
[nombre]y
y
[nombre]p
[nombre]P
:set paste
:set nopaste
o
O
[nombre]cc
[nombre]J
[nombre]u
[nombre]Ctrl-R
'.
[nombre]h
[nombre]j
[nombre]k
[nombre]l
v
V
Ctrl+V
:e <fichier>
:r <fichier>
:w <fichier>
:set ff=unix
:set fenc=utf8
gf
:!<shell>
:r !<shell>
:w !<shell>
m<maj>
m<min>
'<min|maj>
:args
:next
:prev
:b <chiffre>
/<regex>/g
/
:set ignorecase
gd
:[zone]s/<regex>/<chaîne>/g
:[zone]!<shell>
:[zone]g/<regex>/<vi>
:[zone]g!/<regex>/<vi>
[nombre]~
K
Ctrl-X Ctrl-N
Ctrl-X Ctrl-L
Ctrl-R =<chaîne>
:syntax on
Ctrl-w s
Ctrl-w v
Ctrl-w q
Ctrl-w [flêche directionelle]
Ctrl-w r
Ctrl-w R
Ctrl-w x
q<min>
q
@<min>
Ceci est un un petit aide mémoire que je garde sous le coude pour moi-même et quelques amis, il n'est pas complet et n'a pas pour but de le devenir.
C'est une introduction ou un rappel, pour toute aide dans Vi ou Vim, ne pas hésiter à utiliser la commande d'aide interne qui détaille l'ensemble des commandes :
:help
:help <vi>