vi permet de définir des macro-commandes et des abréviations.
Les macros permettent de remplacer une séquence de touches par une autre, ce qui permet de définir de nouvelles commandes. Par exemple,
:map v 10d
crée la commande v du mode commande, qui supprime des blocs de 10 lignes.
Les abréviations permettent d'éviter de taper une séquence de lettres plutôt longue. Par exemple :
:ab GNU gnu is not unix
crée l'abréviation GNU, qui en mode insertion est remplacée par gnu is not unix dès que suffisamment de caractères sont tapés pour lever toute ambiguïté (les abréviations sont généralement étendues quand un espace est inséré pour indiquer la fin du mot).
Le comportement de vi et de ses commandes peut être ajusté grâce à ce que vi appelle des « options ». La commande :set permet de les consulter et de les modifier. Certaines options sont booléennes, c'est-à-dire qu'elles peuvent prendre deux valeurs seulement : vrai ou faux, ou plus exactement activée et désactivée. Par exemple :
:set number
que l'on peut abréger par
:set nu
affiche le numéro de chaque ligne.
:set nonumber :set nonu
sont équivalentes et permettent de désactiver cette option.
Parmi les options booléennes, on peut trouver (liste non exhaustive) :
Commande | Effet |
---|---|
:set ignorecase | ignore la casse lors de la recherche de chaînes de caractères |
:set readonly | interdit la modification du fichier ouvert |
:set autoindent | indente automatiquement le code lors de l'édition |
:set ruler | indique le numéro de ligne et de colonne sur lesquelles se trouve le curseur |
:set showmode | montre le mode dans lequel se trouve vi |
Les autres options prennent une valeur. Par exemple :
:set tags=./tags
indique à vi où chercher le fichier de marqueurs.
L'ensemble de toutes les options disponibles peut être affiché avec
:set all
L'ensemble des options de vi (ainsi que les macros et les abréviations) peuvent être fixées pour chaque session d'édition en les ajoutant dans le fichier ~/.exrc. Ce fichier est lu automatiquement au démarrage de vi, et les commandes qu'il contient sont exécutées comme si elles étaient tapées par l'utilisateur (le : initial est inutile). Exemple :
set nu map @ dd ab sig Mr. Robert Le NomBienLong