vi a trois modes de fonctionnement différents:
Dans la suite, on appelera ces commandes les commandes ex.
| : | passer en mode commande |
| Q | passer en mode commande |
| :q | quitter |
| :q! | forcer à quitter |
| :w fichier | sauver le fichier |
| :w!fichier | sauver le fichier impérativement |
| :w | sauver sous |
| :wq | écr re le fichier et sortir |
| :m,nw fichier | ecrire les lignes de m à n dans un fichier |
| :e! | rééditer en oubliant les modifications |
| :e: | editer un nouveau fichier (tout en conservant les buffers) |
| :e# | editer le fichier précédent |
| :r fichier | insère le fichier à l'emplacement courrant |
| :!commande | execute la commande système commande |
| :r! commande | execute la commande système commande et insère le résultat à l'emplacement courrant |
| :sh | appel d'un sell. Sortie par exit |
| :s/DE/A/ | remplace DE par A (1 fois) dans la ligne courrante |
| :s/DE/A/g | remplace tous les DE par A |
| :s/\(DE\)/A | \1/ remplace DE par A et contatene avec DE |
| :map K ibegin | map la touche K avec l'insertion du mot begin |
| :map K d$ | map la touche K avec l'effacement jusqu'à la fin de la ligne |
| :unmap K | retire le mapapge de la touche K |
| :map | affiche les touches mappées |
Pour le mappage de touches, les touches que l'on peut mapper sont
| :ab ch | chaine |
| ch ESC | inseree chaine |
| :ab | affiche les abbréviation |
| :una ch | retire une abbréviation |
| :set list | montre les caractères invisibles |
| :set nolist | cache les caractères invisibles |
| :set nu | fixe les numéros de lignes |
| :set number | montre les numéros de lignes |
| :set nonu | retire les numéros de ligne |
| :set nonumber | cache les numéros de lignes |
| :set ignorecase | ignore la casse pour les recherches |
| :set ic | |
| :set ignorecase | n'ignore pas la casse pour les recherches |
| :set noic | |
| :set all | montrer les options |
| :set list | afficher les caractères lisibles |
| :set wm=n | garder n espaces de marge à droite |
| :set autoindent | auto indentation on |
| :set noautoindent | pas de auto indentation |
| :set all | montre les paramêtres |
Ces parametres peuvent être conservés dans .exrc du home directory
Attention sous AIX le nombre d'option est restreint. Certaines options n'existent pas.
| :set ai | permet de faire automatiquement les indentations |
| :set autoindent | |
| :set shiftwidth=n | permet de régler à n le nombre d'espace d'une indentation |
| :set sw=n |
| 0 | va au début de la ligne |
| $ | va à la fin de la ligne |
| h | gauche |
| j | haut |
| k | bas |
| l | droite |
| 1G | va en début de document |
| :100 | va à la ligne 100 |
| H | va en haut de l'écran |
| L | va en bas de l'écran |
| G | va à la dernière ligne du fichier |
| nG | va à la ligne n du fichier |
| page down | |
| page up | |
| w | début du mot suivant |
| e | fin du mot suivant |
| W | début du mot précédent |
| nW | en avant de n mot |
| E | fin du mot précédent |
| B | en arrirère de unmot |
| nB | en arrière de n mot |
| ( | début de la phrase précédente |
| ) | début de la phrase suivante |
| { | début du paragraphe précédente |
| } | début du paragraphe suivante |
| % | va à la parenthèse ou l'accolade correspondante. |
| /exp | cherche une chaine vers l'avant |
| ?exp | cherche une chaine vers l'arrière |
| n | poursuit la recherche dans le même sens |
| N | poursuit la recherche dans le sens contaire |
| s/chaine1/chaine2/ options | remplace la chaine chaine1 par chaine2 |
| :g/string1/s//string2/ options | recherche et remplacement global de a chaine chaine1 par chaine2 |
| x | efface un caractère |
| nx | efface n caractères |
| dw | efface un mot |
| dd | efface une ligne |
| ndd | efface n lignes |
| D | efface jusqu'à la fin de l ligne |
| d0 | efface jusqu'au début de la ligne |
| dG | efface jusqu'à la fin du fichier |
| u | défait la dernière modification |
| . | refaire la dernière modification à nouveau |
| Y | sélectionne une ligne |
| n | Sélectionne n lignes |
| p | dépose la sélection après le curseur |
| P | dépose la sélection avant le curseur |
| J | union de la ligne suivante et de la ligne courrante |
| nJ | Union de n lignes avec la courrante |
| xp | transpose 2 caractères |
| << | indentation de la ligne vers la gauche |
| >> | indentation de la ligne vers la droite |
| n<< | indente les n lignes suivantes |
| n>> | |
| <% | indente si on est placé sur le premier élément d'une paire de crochets, de parenthèses ou d'accolades |
| >% |
| a | ajout après le curseur |
| A | ajout à la fin de la ligne |
| i | insère avant lr curseur |
| ni | insère n fois le texte |
| I | insère en début de ligne |
| o | ouvre une ligne après le curseur |
| O | ouvre une ligne avant le curseur |
| cw | modifie un mot |
| ncw | modifie n mot |
| C | modifie une ligne |
| C$ | modifie une ligne |
| r | remplace un caratère |
| nr | remplace n lettre par le caractère |
| R | remplace/retape une ligne |
Il existe 26 buffers nommés avec des lettres (de a à z) et 9 avec des chiffres (de 1 à 9)
| commande | buffer | explication |
| "ayy | a | copier une ligne dans le buffer a |
| "a5yy | a | mettre cinq lignes dans le buffer a |
| "Byy | b | ajouter une ligne dans le buffer b |
| "ap | a | paste à l'emplacement courrant du buffer a |
On peut avoir jusqu'à 9 buffer de \1 à \9. Toutes les chaines cherchées doivent être encapsulées ente \( et \)
exemple:
comment déplacer un texte du fichier source à destination
vi source “%blue (a)%red (10)yy (copie 10 lignes dans le buffer a):w (ecrire le buffer a) :e dest (afficher le fichier destination) “ap (copie du texte après le curseur) :30,60w
L'editeur VI présente les limitations suivantes sous AIX, sachant que le compte se fait en caractères de 8 bits:
Je l'ai déjà évoqué plus haut, certaines options de configuration n'existent pas sous AIX.
Les principales sont:
Exemple sous AIX:
:set all autoindent mesg noshowmode autoprint nomodeline noslowopen noautowrite nonumber tabstop=8 nobeautify nonovice taglength=0 closepunct='".,;)]} nooptimize tags=tags /usr/lib/tags directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipbp backtag noedcompatible partialcharacter=- term=vt100 noerrorbells prompt noterse noexrc noreadonly timeout flash redraw ttytype=vt100 hardtabs=8 remap warn history=32 report=5 window=23 noignorecase scroll=11 wrapscan linelimit=1048560 sections=NHSHH HUuhsh+c wrapmargin=0 nolisp shell=/usr/bin/ksh nowriteany nolist shiftwidth=8 wraptype=word magic noshowmatch