Vi: fonctions avancées


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.


SOMMAIRE
Notations
Déplacement du curseur
Passage en mode frappe de texte
Modification de texte
Recherche et remplacement
Manipulation du buffer
Manipulation de blocs externes
Commandes diverses
Les "macros"


Notations :

- 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


Commandes de déplacement du curseur (mode commande)
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


Commandes de passage en mode frappe de texte ( à la fin de ces commandes, vous êtes en mode insertion)
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


Commandes de modification du texte (mode commande)
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 et remplacement de chaîne de caractères (mode commande)
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


Utilisation du buffer (mode commande)
Remplissage du Buffer
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.

Récupération du buffer
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


Les manipulation de Blocs externes
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>


Les commandes diverse (mode 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.


Les macros commandes et leur sauvegarde entre session (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. ......