Tous les systèmes d'exploitation basés sur UNIX implémentent "vi
".
Il s'agit de l'éditeur de texte standard, conçu pour fonctionner sur tout type de terminal.
Certains utilitaires l'utilisent comme éditeur par défaut pour l'édition de fichier texte, c'est d'ailleurs le cas pour le planificateur de tâche cron.
Il est impératif d'avoir des connaissances de l'éditeur Vi si l'on se destine à être administrateur de systèmes basés sur Unix.
Sous Linux c'est l'éditeur de texte vim qui est utilisé. Il ajoute certaines fonctionnalités supplémentaires telles que la reconnaissances de certains langages de programmation qui permettent la coloration syntaxique, l'annulation sur plusieurs commandes et un grand nombre d'options concernant l'environnement de travail.
vi
est l'éditeur de texte standard d'UNIX.
Il fonctionne en mode plein écran impliquant que le type de terminal utilisé à une grande importance.
La variable d'environnement TERM
permet de définir le type de terminal.
vi
n'est pas présent sur GNU/Linux. Si l'on excute vi
, c'est la commande vim
qui sera utilisée.
Il y a deux manières d'utiliser vim
:
vi
et vim
vi
mais autorise un usage amélioré et des fonctionnalités plus nombreuses.vim
possède plusieurs modes de fonctionnement :
12j
permettra de se déplacer 12 lignes vers le bas. Cette commande sera notée comme ceci : [nb]j
Le mode par défaut de vim
est le mode commande.
Un appui sur la touche <Esc>
permet de revenir en mode commande depuis le mode insertion.
Syntaxe
vi [OPTIONS] <nom_du_fichier>
Options | Descriptions |
---|---|
-R |
Lecture uniquement |
+nb |
Positionnement dans le fichier à la ligne "nb " |
+/chaîne |
Positionnement dans le fichier sur la première occurence de chaîne |
A l'entrée dans vim
le mode par défaut est également le mode commande.
Options | Descriptions |
---|---|
:wq |
Sauveagrde et sortie de vi . Affectation systématique de la dernière date de modification |
:q |
Sortie sans sauvegarde |
! |
Force l'exécution de la commande qui le précède. Par exemple, :q! permet de quitter vim sans tenir compte des modifications effectuées |
Options | Descriptions |
---|---|
[nb]k |
Se déplace vers le haut [nb] fois |
[nb]j |
Se déplace vers le bas [nb] fois |
[nb]h |
Se déplace vers la gauche [nb] fois |
[nb]l |
Se déplace vers la droite [nb] fois |
[nb]- |
Se déplace au 1er caractère des [nb] lignes vers le haut |
[nb]+ |
Se déplace au 1er caractère des [nb] lignes vers le bas |
[nb]$ |
Se déplace au dernier caractère de la ligne courante + [nb] |
0 |
Se déplace au premier caractère de la ligne |
^ |
Se déplace au premier caractère du premier mot de la ligne |
[nb]w |
Se déplace au début du [nb] ème mot suivant ou ponctuation |
[nb]W |
Se déplace au début du [nb] ème mot suivant, déterminé par un espace, une tabulation ou une nouvelle ligne |
[nb]b |
Se déplace au début du [nb] ème mot précédent ou ponctuation |
[nb]B |
Se déplace au début du [nb] ème mot précédent, déterminé par un espace, une tabulation ou une nouvelle ligne |
[nb]e |
Se déplace à la fin du [nb] ème mot après le mot courant |
[nb]E |
Se déplace à la fin du [nb] ème mot après le mot courant, déterminé par un espace, une tabulation ou une nouvelle ligne |
:[nb] |
Aller à la ligne [nb] |
gg ou :0 |
Se déplacer au début du fichier |
G ou :$ |
Se déplacer à la fin du fichier |
% |
Se déplace sur la caratère parenthèse ou sur l'accolade correspondant (ouvran / fermant) |
Options | Descriptions |
---|---|
/<chaîne> |
Recherche de l'occurence suivante de la chaîne spécifiée. Si aucune chaîne n'est donné, la dernière chaîne est cherchée |
?<chaîne> |
Recherche de l'occurence précédente de la chaîne spécifiée. Si aucune chaîne n'est donné, la dernière chaîne est cherchée |
n |
Répétition de la dernière recherche de chaîne dans le même sens |
N |
Répétition de la dernière recherche de chaîne dans le sens inverse |
Options | Descriptions |
---|---|
m<a-z> |
Marque la position courante du curseur avec la lettre donnée. Par exemple "me" positionne la marque "e" à la position courante |
'<a-z> |
Place le curseur au début de la ligne correspondante à la marque indiquée (une lettre) |
`<a-z> |
Place le curseur sur la marque indiquée (une lettre) |
Options | Descriptions |
---|---|
a |
Insertion après le caractère courant |
A |
Insertion après la fin de la ligne courante |
i |
Insertion avant le caractère courant |
I |
Insertion avant le premier caractère significatif de la ligne courante |
o |
Ajout d'une ligne vide après la ligne courante et passe en mode insetion sur cette ligne |
O |
Ajout d'une ligne vide avant la ligne courante et passe en mode insertion sur cette ligne |
Pour rappel, appuyer sur la touche
<Esc>
permet de quitter le mode insertion et de revenir en mode commande.
Options | Descriptions |
---|---|
[nb]x |
Suppression des [nb] caractères suivants à partir du couractère courant |
[nb]X |
Suppression des [nb] caractères précédents à partir du couractère courant |
D |
Suppression du reste de la ligne à partir du caractère courant |
[nb]d(wW) |
Suppression de [nb] mots à partir du caractère courant. Les séparateurs de mots avec w sont la ponctuation, les espaces, la tabulation et séparateurs de mots avec W sont les espaces ou tabulation. Exemple : dw ou dW |
[nb]dd |
Suppression de [nb] lignes à partir de la ligne courante |
La dernière suppression est stockée dans un tampon mémoire appelé
tampon d'annulation
Copier | Descriptions |
---|---|
[nb]y(wW) |
Copie de [nb] mots à partir de la position courante. Exemple : yw ou yW |
[nb]yy |
Copie de [nb] lignes à partir de la ligne courante |
Couper | Descriptions |
---|---|
[nb]d(wW) |
Coupe de [nb] mots à partir du caractère courant. Exemple : dw ou dW |
[nb]dd |
Coupe de [nb] lignes à partir de la ligne courante |
Coller | Descriptions |
---|---|
[nb]p |
Insertion après la ligne courante de [nb] fois le contenu du tampon |
[nb]P |
Insertion avant la ligne courante de [nb] fois le contenu du tampon |
Pour les commandes ci-dessus le tampon d'annulation est utilisé par défaut sauf si l'on nomme explicitement le tampon avec lequel on souhaite effectuer le transfert avec "<a-z>
(double quote plus une lettre en minuscule).
L'utilisation d'une lettre en majuscule pour le transfert dans le tampon permet de compléter le contenu d'un tampon existant.
Tous les tampons sont conservés en cas de changement d'espace de travail dans une même session vim
Options | Descriptions |
---|---|
r<car> |
Remplacement du caractère courant par le caractère <car> spécifié |
R |
Passage en mode remplacement. Sortir de ce mode en appuyant sur <Esc> |
[nb]s |
Substutition de caracètres. Les [nb] caractères à partir du caracètre courant sont remplacés par les caractères saisis. Le dernier caractère à substituer est signalé par $ . Sortir de ce mode en appuyant sur <Esc> |
[nb]S |
Substutition de ligne. Les [nb] lignes à partir de la ligne courante sont efface et l'on passe en mode insertion. Sortir de ce mode en appuyant sur <Esc> |
[nb]c(wW) |
Substitution de mots. Les [nb] mots à partir du caractère courant seront remplacés par les caractères saisis. Exemple : cw ou cW .Sortir de ce mode en appuyant sur <Esc> |
vim
est capable d'effectuer des recherches et de remplacer ce que l'on recherche mais aussi de rechercher des lignes pour les supprimer, les déplacer, etc.
C'est à l'aide de commande ex
que vim
effectue ces actions.
:<ligne à traiter> g/expression régulière de recherche/<commande ex>
Options | Descriptions |
---|---|
<ligne à traiter> |
Déclaration d'une plage de lignes où la commande ex s'exécutera. La plage est déclarée comme ceci : [nb],[nb] (Exemple : 11,16 de la ligne 11 à la ligne 16). Attention, cette déclaration est optionnelle |
g |
indique à la commande ex qu'elle s'exécutera sur toutes les occurences trouvées verticalement. Sans cette option, la commande ex s'arrêtera à la première occurence verticale trouvée |
/ |
Séparateur d'expression régulière. Les recherches effectuées dans vim et ses commandes ex sont des expressions régulières |
/RegEx/ |
Expression recherchée dans le fichier |
<Commande ex> |
La commande à exécuter lorsque le traitement trouve une occurence définie par l'expression régulière. |
Quelques exemples utiles de commande ex
Commandes | Descriptions |
---|---|
s/regex/regex/g |
Substitution |
m <NumLigne> |
Déplacement |
d |
Suppression |
Syntaxe :
:<ld,lf> g/regex de R/s/regex ES/regex S/g
options | Descriptions |
---|---|
<ld,lf> |
Ligne de début et ligne de fin de traitement |
g |
recherche globale (verticale) dans tout le fichier. Sans cette option la recherche s'arrêtera à la première occurence trouvée. |
/ |
Séparateur des expressions |
regex de R |
Sélectionne uniquement les lignes contenant l'expression regex |
s |
Substitution |
regex ES |
Chaîne à remplacer définie par l'expression regex ES . Si l'expression régulière n'est pas définie c'est l'expression recherchée regex R qui sera remplacée |
regex S |
Expression régulière qui définie par quoi le remplacement sera fait |
g |
Pour toutes les occurences trouvées sur la ligne. Sans cette option ça serait uniquement la première occurence de la ligne |
options | Descriptions |
---|---|
:r nom_fichier |
Insertion après la ligne courante du fichier nom_fichier |
:[bn] r nom_fichier |
Insertion après la ligne [nb] du fichier nom_fichier |
:r !cmd |
insertion après la ligne courante du résultat de la commande cmd |
:w nom_fichier |
Enregistrer sous nom_fichier |
:w>>nom_fichier |
Ajouter du contenu de l'espace de travail à la fin du fichier nom_fichier |
options | Descriptions |
---|---|
:n |
Positionnement dans l'espace de travail suivant si plusieurs fichiers ont été spécifiés au lancement de vi |
:n nom_fichier |
Positionnement dans l'espace de travail qui contient le fichier nom_fichier |
:N |
Positionnement dans l'espace de travail précédent |
:rew |
Retour au premier espace de travail (premier fichier de la liste passée à vi ) |
Il est conseillé d'enregistrer les modifications faites à un fichier avant d'ouvrir un autre fichier. En ajoutant le commutateur
!
en plus, il sera possible de basculer d'espace de travail en espace de travail mais sans enregistrer les modifications.
options | Descriptions |
---|---|
:!cmd |
Exécution de la commande cmd . Appuyer sur n'importe quelle touche pour revenir à l'environnement de vi |
:f |
Affichage du statut du fichier chargé dans l'espace de travail |
. |
Répétition de la dernière commande de modification ou d'insertion de texte |
u |
Annulation de la dernière commande exécutée |
^r (Ctrl+r) |
Refaire la dernière commande annulée |
[nb]J |
Jonction de [nb] lignes à la ligne courante. Les caractères <newline> (\n et \r ) sont remplacés par des espace |
Il est possible de personnaliser l'environnement de travail de vim
lors de chaque session ou d'enregistrer les différentes options dans un fichier qui sera pris en compte à chaque appel de vim
options | Descriptions |
---|---|
:set [option] |
Active l'option [option] |
:set no[option] |
Le préfixe no désactive l'option [option] |
:set [option]? |
Affiche la valeur ou le statut de l'opton [option] |
:set |
Affiche les options modifiées |
:set all |
Affiche l'ensemble des options |
| showmode
| Visualisation du mode de travail sur la ligne de statut |
| autoindent
| Indentation automatique (utilisé principalement en programmation) |
| number
| Affiche la numérotation des lignes |
| ignorecase
| Permet d'ignorer la casse. Pas de distinction entre les majuscules et minuscules |
| tabstop
| Nombre de caractères entre deux tabulation. Par défaut le nombre est positionné à 8 |
| compatible
| Active le mode compatible de vi
pour vim
|
Les options que l'on souhaite utiliser à chaque exécution de vim
peuvent être stockées dans un fichier .vimrc
situé dans le répertoire de connexion de l'utilisateur (anciennement .exrc
pour vi
).
Il est possible de mettre des commentaires en ajoutant une double quote en début de la ligne
$ cat $HOME/.vimrc
set number
set ignorecase
Attention, sous
vi
le fichier ne doit pas contenir de lignes vides sinon un message d'erreur sera visible à chaque lancement.
Les fichiers sous UNIX ont comme déclaration de fin de ligne le caractère non-imprimable \n
.
Sous Windows, le fins de lignessont déclarées par les caractères non imprimable \r\n
.
todos <fichier>
fromdos <fichier>
Il est également possible de convertir le format de fichier sous vi
grâce à l'extention fileformat
en mode commande ex
Exemple :
:set fileformat=unix
Convertir au format UNIX
:set fileformat=dos
Convertir au format Windows