Après vous avoir présenté la grammaire de Vim à travers l’article précédent — Passez à l’action !, je n’ai pu résister à l’envie de poursuivre cette découverte de notre éditeur préféré par son pendant linguistique, j’ai nommé l’orthographe. Plus précisément, je vous propose de découvrir une fonctionnalité méconnue de Vim : la correction orthographique.
Vim nous est en effet livré avec un correcteur orthographique simple et puissant dont je me propose de vous présenter l’étendue des possibilités dans cet article. Nous allons donc voir comment activer cette fonctionnalité, comment la configurer pour l’adapter à nos besoins et comment la pousser dans ses derniers retranchements — vous verrez, on peut aller très loin et ce, sans installer le moindre plugin. Mais je vous fais saliver, alors activons la sans plus attendre !
Pour activer la vérification orthographique (spell checker en anglais — Dora
sort de ce corps !), il
suffit de taper la commande :set spell
en mode Normal — vous vous souvenez,
celui par défaut quand vous ouvrez Vim.
:set spell
Ainsi activé, le correcteur orthographique met en surbrillance les mots
erronés. Plus précisément, les mots mal orthographiés se verront attribuer
le flag SpellBad
auquel est associé un style syntaxique. Ce style dépend
de votre thème, du jeu de couleurs de votre terminal, ainsi que de l’usage ou
non de l’éditeur en mode graphique — gVim ou macVim par exemple.
Voici le rendu par défaut dans un terminal (à gauche) et le rendu avec le thème que j’ai choisi d’utiliser :
Par défaut, seul le dictionnaire anglais est installé et Vim s’attend donc à ce que votre texte soit rédigé dans cette langue. Nous nous en contenterons pour l’instant, le temps de découvrir les actions rendues disponibles par l’activation du correcteur orthographique.
Vim met donc en évidence les mots mal orthographiés. Il peut s’agir de mots
qui lui sont totalement inconnus ou d’une simple coquille qui s’est glissée
dans votre prose. Mais Vim pousse la correction orthographique un peu plus
loin en faisant la distinction entre les mots inconnus (flag SpellBad
), les
mots rares (SpellRare
), ceux qui devraient vraisemblablement commencer par
une majuscule (SpellCap
) — en début de phrase par exemple — et ceux qui lui
sont connus mais pour une région différente (SpellLocal
). Par exemple, la
plupart des mots se terminant par -our en anglais britannique, s’écrivent -or en
anglais américain : colour/color).
Bien évidemment, à flag différent, coloration différente afin de nous aider à comprendre l’origine de l’erreur.
Ici nous remarquons que le style par défaut ne met en surbrillance que les mots qui lui sont inconnus.
Ce que nous souhaiterions à présent, c’est palier à ces petites maladresses. Pour cela, Vim met à notre disposition un ensemble d’actions pour naviguer d’erreur en erreur, lui signifier qu’un mot est correct ou incorrect, revenir sur notre décision ou encore lui demander d’afficher les suggestions de correction. Voici ces actions en détail :
Action | Effet |
---|---|
]s | Se déplacer jusqu'au mot erroné suivant |
[s | Revenir sur le mot erroné précédent |
]S |
Similaire à ]s mais ne prend en compte que SpellBad
|
[S |
Similaire à ]s mais ne prend en compte que SpellBad
|
zg | Déclare le mot sous le curseur comme bon —good— et l'ajoute au dictionnaire |
zw | Déclare le mot sous le curseur comme mauvais —wrong— et l'ajoute au dictionnaire |
zug | Retire du dictionnaire le mot sous le curseur déclaré comme bon |
zuw | Retire du dictionnaire le mot sous le curseur déclaré comme mauvais |
z= | Demande à afficher les suggestions de correction |
À savoir qu’il existe aussi zG
, zW
, zuG
et zuW
qui ont le même
fonctionnement que leurs pendants en minuscule, à ceci près qu’ils utilisent
un dictionnaire temporaire pour y stocker vos ajouts. Ce dictionnaire
disparaîtra à la fermeture du fichier et vos ajouts dans celui-ci avec lui.
L’anglais c’est bien beau me direz-vous, mais ce n’est pas forcément dans cette langue que je rédige ! Qu’à cela ne tienne, installons de ce pas le dictionnaire français.
NB: Vim étant à la page, son dictionnaire français intègre depuis belle lurette la tant médiatisée “réforme 1990” ;)
Pour installer un nouveau dictionnaire — le français par exemple —, il suffit
tout simplement de déclarer la langue à utiliser via la commande
:set spelllang=fr
. Si le dictionnaire n’est pas installé, Vim proposera
automatiquement de le télécharger.
Astuce: Vous pouvez retrouver l’ensemble des dictionnaires disponibles sur ftp.vim.org.
Si vous souhaitez ajouter un dictionnaire qui n’est pas proposé par Vim, c’est également possible. Pour ce faire je vous recommande la lecture de l’article de Henry Prêcheur (en) qui couvre ce sujet.
Pardon ? Vous voulez le correcteur anglais et français sur le même document !? Et la souplesse nécessaire à l’ajout de nouveaux mots à l’un ou l’autre ? Rassurez-vous, Vim est l’éditeur des scribouillards exigeants !
Voici donc comment procéder. Je me permettrais juste une petite digression avant
de commencer pour préciser un détail d’importance. Toutes les commandes
présentées seront à réitérer à chaque ouverture de fichier. Pour nous épargner
cette peine, Vim met à notre disposition un fichier de configuration nommé
.vimrc
qui se doit de reposer à la racine de votre répertoire utilisateur
(communément représenté par la variable d’environnement $HOME
sur les
systèmes Unix). Pour persister dans ce fichier les commandes que nous tapons
en mode Normal, il suffit d’omettre le symbole :
.
Ceci étant dit, déclarons donc dans notre fichier de configuration l’activation de la correction orthographique ainsi que les langues que nous souhaitons utiliser.
setlocal spell
setlocal spelllang=fr,en
setlocal spellfile=$HOME/.vim/spell/fr.utf-8.add,$HOME/.vim/spell/en.utf-8.add
C’est aussi simple que cela ! La subtilité réside néanmoins dans la dernière ligne sans laquelle nous ne pourrions différencier le dictionnaire à utiliser lors d’un ajout.
À présent, pour ajouter au dictionnaire français un mot que l’on considère
correct, il nous suffit de nous placer sur le mot en question et de presser
les touches 1zg
. De même, pour l’anglais nous ferons un appui sur les
touches 2zg
car il s’agit de la seconde langue déclarée dans notre
configuration.
J’ai pour habitude d’utiliser Vim directement dans un terminal et non gVim. Cela implique une moins grande souplesse au niveau de la mise en évidence du texte et un surlignage par défaut plutôt tape-à-l’œil comme vous avez pu le constater dans les exemples précédents.
En effet, alors que gVim ou macVim soulignent de douces vagues rouges les mots
mal orthographiés, Vim les surligne violemment de rouge tel un maître d’école
déversant son désappointement sur sa trente-deuxième copie de la matinée… Bref,
c’est aveuglant et ça rend parfois le texte illisible. Mais rassurez-vous la
solution est toute simple : il suffit de redéfinir les couleurs et décorations
utilisées pour nous présenter les mots incriminés. Cela se fait comme suit, dans
votre .vimrc
:
hi clear SpellBad
hi clear SpellCap
hi clear SpellRare
hi clear SpellLocal
hi SpellBad cterm=underline ctermfg=9 ctermbg=0 gui=undercurl
hi SpellCap cterm=underline ctermfg=14 ctermbg=0 gui=undercurl
hi SpellRare cterm=underline ctermfg=13 ctermbg=0 gui=undercurl
hi SpellLocal cterm=underline ctermfg=11 ctermbg=0 gui=undercurl
On retrouve ici les flags dont nous avons déjà parlé. Les quatre premières
lignes réinitialisent le style de surlignage (hi
est ici le diminutif de
highlight
). Puis les lignes suivantes précisent le style et les couleurs de
texte et de fond à utiliser ; aussi bien dans le terminal avec cterm
,
ctermfg
, ctermbg
que via l’interface graphique grâce à gui
. Le résultat
obtenu sera celui qui vous était présenté sur la droite des exemples
précédents.
Si comme moi vous possédez un clavier Bépo au fond d’un tiroir et que vous
utilisez au quotidien un bon vieux Azerty — qui plus est celui de la marque à
la pomme tant qu’à faire — vous conviendrez que les touches ]
et [
utilisées pour naviguer de mot erroné en mot mal orthographié ne sont pas des
plus accessibles. Qu’à cela ne tienne, définissons nos propres raccourcis !
Sans que la digression ne devienne la norme, je m’en autorise une seconde pour
vous présenter la touche <Leader>
. Vim permet de définir ses propres
actions. Et pour éviter que celles-ci rentrent en conflit avec les actions
natives de Vim ou définies par un plugin que vous auriez installé, il est
possible de configurer une touche qui débutera toutes nos actions
personnelles. Cette touche est connue sous le nom de <Leader>
.
Nativement, Vim définit \
(antislash) comme touche <Leader>
. L’usage
courant veut cependant que l’on utilise la touche ,
(virgule) à la place.
Pour ma part, j’ai récemment choisi de définir la touche ` ` (espace) comme
touche <Leader>
et ce pour deux raisons principales :
f{char}
pour revenir sur l’occurrence précédente du
caractère recherché, la touche espace n’a d’autre effet que de déplacer le
curseur sur le caractère suivant, ce que fait déjà la touche l
.Cela étant dit, libre à vous de choisir la touche qui vous convient le mieux car après tout, c’est votre configuration, c’est votre Vim !
Pour définir la touche <Leader>
, ajoutons donc une petite ligne en haut de
notre .vimrc
(à adapter, bien entendu, en fonction de ce que l’on vient de
se dire) :
let mapleader=' '
Voyons donc à présent comment rendre l’utilisation du correcteur
orthographique plus fluide et par la même, réduire nos risques d’arthrose. Je
propose d’utiliser notre fameuse touche <Leader>
, suivie de z
pour rester
cohérent avec ce qu’on a vu jusqu’ici. Et pour terminer nos actions, les
touches n
comme next et p
comme previous pour accéder à l’occurrence
suivante ou précédente. Nous allons donc redéfinir un certain nombre
d’actions. Sans trop rentrer dans le détail, on peut dire que cela fonctionne
à la manière d’un alias shell.
nnoremap <Leader>zn ]s
nnoremap <Leader>zp [s
nnoremap <Leader>zN G[s
nnoremap <Leader>zP gg]s
Ainsi <Leader>zn
déplacera notre curseur au début du prochain mot erroné. Les
deux dernières actions permettent respectivement d’aller directement au dernier
mot erroné et de revenir sur le tout premier.
Afin d’éviter d’avoir à se rappeler quel dictionnaire a été déclaré en
premier, voici comment réaliser des actions sur le dictionnaire français via
la touche f
et l’anglais via la touche e
:
nnoremap <Leader>zf 1z
nnoremap <Leader>ze 2z
Vous aurez remarqué que 1z
n’est pas une action en soi mais juste une amorce.
Ainsi toutes les actions commençant par 1z
peuvent à présent être réalisée
via <Leader>zf
. Par exemple l’action 1zg
ou <Leader>zfg
déclarera le mot
sous le curseur comme correct et l’ajoutera au dictionnaire français.
Non ce n’est pas une nouvelle approche éducative, voyons ! Je vous propose
simplement un petit raccourci supplémentaire afin d’activer/désactiver la
vérification orthographique à discretion. Il vous suffit pour ce faire d’ajouter
cette simple ligne à votre .vimrc
:
nnoremap <Leader>ts :setlocal spell! spell?<Return>
Ainsi, lorsque vous presserez les touches <Leader>ts
(toggle spell) la
vérification orthographique s’activera. Une autre pression sur ces mêmes touches
désactivera cette dernière.
Bien sûr, libre à vous d’adapter ces raccourcis comme bon vous semble.
nnoremap <Leader>zd "zyiw:execute ":silent !open dict://".@z.""<CR>
Là on commence à entrer dans la cour des grands avec une commande digne d’une
insulte du capitaine Haddock ! Malheureusement, elle ne fonctionnera que pour
les utilisateurs d’OSX. Après avoir ajouté cette ligne à votre fichier de
configuration et relancé votre éditeur, placez votre curseur sur un mot puis
pressez les touches <Leader>zd
. Cela ouvrira le dictionnaire de Mac OS sur la
définition de ce mot. La classe à Dallas !
L’équipe Synbioz.
Libres d’être ensemble.