Lorsqu'il s'agit d'éditer un texte "rédactionnel" comme une lettre, un mémoire ou autre, il n'est pas nécessaire de faire appel à des fonctions particulières de Vim. En revanche, s'il s'agit de programmation ou d'édition d'un fichier HTML, par exemple, il en va tout autrement. Il est beaucoup plus agréable de voir le texte ou du moins, certains éléments du texte, apparaître avec une couleur spécifique. L'utilisateur pourra ainsi facilement repérer des éléments importants du code (tags HTML, fonctions, conditions, commentaires, etc.).
Vim est livré avec un grand nombre de fichiers de configuration permettant la colorisation syntaxique. Ceux-ci sont habituellement placés dans le répertoire /usr/local/share/vim/vimXX/syntax ou /usr/share/vim/vimXX/syntax, où XX représente le numéro de version de Vim. Si ces fichiers ne sont pas présents, c'est que vous n'avez pas installé le package vim-rt.
Le fichier de configuration par défaut de Vim (.vimrc) définit la colorisation syntaxique. Si ce n'est pas le cas, ajoutez simplement la mention :
if &t_Co > 1 syntax on endif
dans votre fichier .vimrc. La mention syntax on seule risque de poser des problèmes avec un terminal noir et blanc. Voilà pourquoi cette commande est placée à l'intérieur d'une condition permettant de savoir si le nombre de couleurs est supérieur à 1. La commande syntax on va alors charger le fichier de configuration syntax.vim placé dans l'un des deux répertoires décrits plus haut. Vous pouvez également associer une touche de fonction du clavier au fait de basculer du mode coloré au mode noir/blanc :
map <F7> :if exists("syntax_on") <Bar> syntax off <Bar> else <Bar> syntax on <Bar> endif <CR>
Une fois cette ligne placée dans votre .vimrc, une simple pression du F7 vous permettra de basculer.
Lors de l'ouverture d'un fichier, Vim va tenter de détecter le type de fichier afin d'utiliser la colorisation adéquate. Il peut cependant arriver que cette détection échoue, mais vous pouvez contourner le problème en demandant à Vim d'utiliser le fichier de syntaxe de votre choix. Ainsi, en éditant un fichier html, vous pouvez utiliser cela pour "forcer" la colorisation :
:syntax on :set syntax=html
Notez que certains fichiers de colorisation n'ont pas forcément un rapport quelconque avec le fichier édité. Prenons l'exemple du fichier whitespace.vim correspondant à la syntaxe whitespace. Celui-ci permet simplement de voir s'afficher en rouge les espaces et tabulations. Cela peut s'avérer utile puisqu'en temps normal, ce genre d'espaces vides n'est pas visible mais peut avoir une influence sur le résultat (script shell, makefile, etc.).
Gardons l'exemple de whitespace.vim pour étudier la syntaxe des fichiers de colorisation. Tout d'abord, voici le contenu du fichier :
" Simplistic way to make spaces and Tabs visible " This can be added to an already active syntax. syn match Space " " syn match Tab "\t" if &background == "dark" hi Space ctermbg=darkred guibg=#500000 hi Tab ctermbg=darkgreen guibg=#003000 else hi Space ctermbg=lightred guibg=#ffd0d0 hi Tab ctermbg=lightgreen guibg=#d0ffd0 endif
Les lignes débutant par " sont des commentaires qui ne seront donc pas interprétés par Vim. Les deux lignes :
syn match Space " " syn match Tab "\t"
associent un groupe à un caractère ou une chaîne de caractères. Nous définissons donc " " comme Space et "\t", qui est une tabulation, comme Tab. Ce sont ces deux groupes qui permettront dans le reste du fichier de faire référence aux chaînes en question. Vient ensuite une condition permettant de réagir en fonction du fond d'écran en cours. En effet, nous ne pouvons pas utiliser les mêmes couleurs si le fond de Vim est noir ou blanc, le résultat serait plus horrible qu'utile.
Nous utilisons ensuite la commande hi (comme highlight) pour renseigner deux paramètres : ctermbg et guibg correspondant respectivement à une couleur de fond (bg = background) pour un terminal couleur (cterm), ou un Vim avec interface graphique, gvim (gui). Les couleurs utilisables pour le terminal couleur sont au nombre de 16 :
black noir darkblue bleu foncé darkgreen vert foncé darkcyan cyan foncé darkred rouge foncé darkmagenta magenta foncé brown brun gray gris darkgray gris foncé blue bleu clair green vert clair cyan cyan clair red rouge clair magenta magenta clair yellow jaune (clair) white blanc
Les couleurs pour l'interface graphique de Vim se configurent avec la syntaxe #RRVVBB de la même manière qu'avec HTML. Dans ce simpliste exemple, nous n'avons fait usage que d'un élément de syntaxe : match. Celui-ci permet de spécifier une expression régulière. Il existe deux autres éléments de syntaxe :
syn keyword LMag LinuxMag
Pas de "" puisque le mot seul est concerné. Ainsi, une mention de LinuxMagazine ne sera pas considéré comme le groupe LMag.
syn region mazone start=<i> end </i>
Ici, les manipulations de couleur qui porteront sur le groupe mazone correspondront à tout le texte figurant entre <i> et </i>.
Vous l'aurez sans doute compris, la syntaxe de ces fichiers de configuration est très souple. Le simple fait d'ajouter des éléments à un groupe facilite grandement les choses. Par exemple :
syn region comm start="/\*" end="\*/" syn match comm "//.*$" if &background == "dark" hi comm ctermfg=darkblue guifg=#000099 else hi comm ctermfg=blue guifg=#0000ff endif
Dans le groupe comm, on configure aussi bien les caractères contenus entre /* et */ mais également toutes les lignes précédées d'un double slash (//). Notez que le caractère * doit être échappé avec \ pour qu'il ne soit pas interprété comme un paramètre de l'expression régulière.
Il est également possible de simplifier la procédure en utilisant les groupes prédéfinis dans Vim. En effet, un certain nombre d'éléments sont récurrents entre différents langages de programmation ou de description (variable, commentaire, fonction). Les couleurs à appliquer à ces groupes par défaut sont déjà définies dans syntax.vim, il vous suffit donc de faire la liaison. Les deux lignes qui suivent sont équivalentes au fichier précédent :
syn region comment start="/\*" end="\*/" syn match comment "//.*$"
Nous n'avons pas besoin de spécifier de colorisation particulière puisque syntax.vim fournit les valeurs par défaut.
Pour être tout à fait franc avec vous, il est très peu probable que vous ayez à créer un nouveau fichier de colorisation syntaxique. En effet, les quelques 200 fichiers livrés avec Vim couvrent quasiment tous les langages et formats de fichiers texte connus. En revanche, il est plus probable que les couleurs par défaut ne vous conviennent pas et dans ce cas, il est indispensable de connaître la syntaxe des fichiers pour procéder aux modifications.
Dans le prochain article, nous nous intéresserons à une autre fonctionnalité très puissante de Vim : les macros. Vous découvrirez que Vim n'a presque rien à envier au très modulaire Emacs.