Avant toute opération:
Se connecter sous une machine unix et lancer vi ......
VI (Visual) ce si puissant éditeur (si si; vous allez voir!), permet de se créer un environnement de travail.
- Dans le reste de cette documentation:
- n, n1, n2 représenterons toujours des nombres
- ^X représentera la touche <CTRL> X (X touche quelconque)
- chaîne, chaîne1, chaîne2 représenterons
des chaînes de caractères
|
|
|
| Défilement d'une page vers le bas | ^F (Forward) |
| Défilement d'une page vers le haut | ^U (Upward) |
| Recul du curseur en début de ligne | 0 (zéro) |
| Placement du curseur sur la dernière ligne de la page courante | L |
| Placement du curseur sur la ligne centrale de l'écran courant | M |
| Placement du curseur sur la ligne n | nG (Go) |
| Placement du curseur sur la première ligne de la page courante | H |
| Positionnement du curseur au début du mot courant | e |
| Positionnement du curseur en fin du mot courant | E |
| Avance du curseur de n caractères | nl |
| Avance du curseur en fin de ligne | $ (End) |
| Avance du curseur d'un mot | w (word) |
| Avance du curseur de n mots | nw |
| Recul du curseur de n caractères | nh |
| Recul du curseur de n mots | nW |
| Descente du curseur de n lignes | nj |
| Remontée du curseur de n lignes | nk |
|
|
|
| Insertion d'une ligne blanche au dessus de la ligne courante | O |
| Ajout de caractères en fin de ligne | A (Append) |
| Insertion de caractères en début de ligne | I (Insert) |
| Ajout d'une ligne blanche au dessous de la ligne courante | o |
| Ajout de caractères après le caractère courant | a |
| Insertion de caractères en avant le caractère courant | i |
|
|
|
| Concaténation de deux lignes (se positionner sur la première) | J |
| Destruction de la fin de la ligne courante | d$ (Del End) |
| Annulation de la dernière commande | u (Undo) |
| Destruction de n caractères | nx (ex: 5x) |
| Destruction de n lignes | ndd (ex: 5dd) |
| Destruction de la position courante à la fin du mot courant | dw |
| Remplacement d'un seul caractère | r suivit du nouveau caractère |
| Remplacement de plusieurs caractères | R texte <ESC> |
| Remplacement d'un mot à partir de la position courante | cw chaîne <ESC> (Change Word) |
| Remplacement jusqu' à la fin de ligne | C chaîne <ESC> |
|
|
|
| Recherche d'une chaîne de caractère vers la fin du fichier | /chaîne |
| Recherche d'une chaîne de caractère vers le début du fichier | ?chaîne |
| Poursuite de la dernière recherche | n (Next) |
| Remplacement de chaîne1 (toutes les occurrences de chaîne1) ,par chaîne2 depuis la ligne n1 jusqu'à la ligne n2 |
:n1,n2 s/chaîne1/chaine2"/g rq : -si n2 est égal à $ alors on effectue le remplacement jusqu'à la fin du document. - /g indique que cette une option de remplacement; les autres ne sont pas documentées ici car pas intéressantes ( man vi ...). |
Attention: certains caractères sont spécialisés (ex / ," ,[ ,] ,\ ,',{,},etc..), il faut donc les despécialiser, ceci se fait en insérant un \ avant ce caractère. le caractère \ ne despécialise qu'un seul caractère; il faut donc le répéter devant chaque caractère spécialiser à remplacer.
ex: :1,$ s/\/bug\"/\\\\correction/g
Cet exemple remplace dans tout le texte l'expression
/bug" par \\correction
|
|
|
| Sous VI chaque action de destruction de quelque chose, détruit la partie concernée du fichier, mais place également cette dernière dans un tampon. | |
| Pour copier la ligne courante dans le tampon | Y (Yank) |
| Pour copier n lignes à partir de la ligne courante dans le tampon: | nY |
| Pour copier le mot courant dans le tampon | yw |
| Pour copier la fin de la ligne courante dans le tampon | y$ |
Attention: Il n'existe qu'un seul
buffer, par conséquent, chaque action de remplissage du tampon
écrase le contenu de ce tampon.
|
|
|
| Pour ajouter le contenu du buffer au dessous la ligne courante | p (put) |
| Pour insérer le contenu du buffer au dessus de la ligne courante | P |
|
|
|
| Pour copier les ligne i à j du texte à la ligne k | :n1,n2 t k |
| Pour déplacer les lignes i à j du texte à la ligne k | :n1,n2 m k (Mouve) |
| Pour écrire les ligne i à j dans un fichier | :n1,,n2 w "fichier" (Write) ou:n1,n2 w! "fichier" si fichier existe |
| Pour ajouter le contenu d'un fichier au dessous de la ligne courante | :r "fichier" (Read) |
| Pour ajouter le résultat d'une commande Shell sous la ligne courante | :r! <commande> |
|
|
|
| Pour avoir des informations sur le fichier courant (nom, position courante, fichier modifié ou non, nombre de lignes du fichier) | <CTRL> G |
| Pour éditer un autre fichier, après avoir sauvegardé le fichier, courant sans sortir de vi | :e "fichier" (Edit) |
| Pour éditer un autre fichier, sans sauvegarder le fichier (abandon des modifications), courant sans sortir de vi | :e! "fichier" |
| Pour sortir de vi sans sauvegarder le fichier courant | :q! (quit) |
| Pour éditer plusieurs fichiers (fic1 fic2 fic3 fic4) | vi fic1 fic2 fic3 fic4 |
| Pour passer au fichier suivant, après avoir sauvegardé le fichier courant | :n (Next) |
| Pour passer au fichier suivant, sans sauvegarder le fichier courant | :n! (Next) |
| Pour afficher le numéro des lignes | :se nu (set numbering) |
| Pour enlever le numéro des lignes | :se nonu (set nonumbering) |
| Pour changer le nombre n d'espace (8 par défaut)imprimés par la touche <TAB> | :ts=n<RETURN> (Tabulation Size) |
| Pour mettre en place le système d'auto indentation | :se ai |
| Pour exécuter depuis vi un programme externe | :! "programme" |
| Pour afficher le mode courant de vi (Insertion , Ajout, etc.) | : set showmode |
| Pour répéter la dernière commande | . (point) |
| Rafraîchissement de l'écran quand le curseur ne semble pas être placé au bon endroit | <CTRL> L |
Le "." répète la dernière commande qui
a été effectuée; si la dernière commande était
une insertion, le "." insérera le texte qui avait été
frapper auparavant jusqu'au passage en mode commande.
VI essaie de relire un fichier dans lequel se trouve toutes les options qu'il
doit prendre par défaut. Ce fichier s'appelle : ".exrc" (ne
pas oublier le point) et doit se trouver dans votre répertoire
principal (identifié par $HOME).
- Pour définir une macro sous vi il faut choisir une lettre (ex : q)(ATTENTION: cette lettre ne doit pas être utilisée pour une autre commande, car sinon, cette commande ne sera plus disponible) la syntaxe es la suivante
= : map q "commande VI"
"Commande VI" est une commande ou une suite de commande de vi.
Cette commande, peut contenir des caractères qui peuvent être interprétés par VI (Ex: <ESC>, <RETURN> , <CTRL> P...) pour despécialiser, ces caractères, il suffit de les faire précéder par <CTRL> V
Ex1= :map q :!make <CTRL> V <RETURN><RETURN>
Cette exemple lance depuis VI l'exécution du programme make, lorsque l'on appuie sur la touche q.
(on note dans la suite : <CTRL> V = ^V)
Ex2 = :map z /(^V<RETURN>d$a);^V<ESC><RETURN>
Cette macro permet de passer simplement d'un prototypage Norme ANSI à un prototypage Norme K&R.
- Affichage des différentes macros = :map <RETURN>
- Finir une macro = :umap "macro"
- Il est également possible de définir des macros dont le nom (nom)est composés de plusieurs caractères = :ab "nom" <commandes>
Ex= :ab inc #include<>^Vhi
à chaque fois que l'on frappera (en mode insertion) la chaîne inc<ESC>,
Vi affichera #include<>, et se mettra en insertion entre < et >
- Il est possible de sauvegarder toutes ces commandes.
Pour ce faire on crée un fichier .exrc dans son répertoire de login.
Ce fichier contiendra une instruction par ligne. Ces instructions étants les même que celles que vous frapperiez dans vi.
Exemple de fichier .exrc:
:map z /(^V<RETURN>d$a);^V<ESC><RETURN>
:se nu
:se ai
:set showmode
etc. ......