vendredi 11 mars 2016
Ce billet a été vu pour la première fois sur le blog de Synbioz le 11 March 2016 sous licence CC BY-NC-SA.

Faites un sans faute

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 !

Corrigez-moi si je me trompe

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 :

bananana

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.

Toutes les fautes ne se valent pas

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.

color

Ici nous remarquons que le style par défaut ne met en surbrillance que les mots qui lui sont inconnus.

L’apprentissage par l’exemple

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.

Vous êtes plus Molière que Shakespeare ?

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 qui couvre ce sujet.

Vous avez dit polyglotte ?

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.

Une correction sexy, sans latex ni fouet

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.

Un jeu personnel

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 !

Une touche rien qu’à soi

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 :

  1. Contrairement à la touche virgule qui en mode Normal peut être utilisée suite à une action de type 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.
  2. La touche espace est large, ce qui la rend très accessible ; et symétrique de par sa position centrale juste sous les pouces, ce qui améliore grandement le confort de frappe.

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=' '

Une navigation plus aisée

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.

La correction à la demande

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.

Le petit plus pour briller en société

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 !