La coloration syntaxique avec Vim

CETTE page présente graphiquement la vingtaine de palettes de coloration syntaxique pour Vim 9.0. Il est aussi question de fabriquer soi-même une coloration syntaxique.

:syntax on et :colorscheme ··· doivent avoir été saisis en ligne d'exécution ou figurer dans le fichier .vimrc pour qu'un de ces schéma de coloration syntaxique puisse fonctionner. Il semble également qu'il faille que le fichier soit sauvegardé avec une extension de script ou de source.

1. Palettes fournies

colorscheme blue

exemple de code avec le modèle de couleur ‘blue’

colorscheme darkblue

exemple de code avec le modèle de couleur ‘darkblue’

colorscheme default

exemple de code avec le modèle de couleur ‘default’

colorscheme delek

exemple de code avec le modèle de couleur ‘delek’

colorscheme desert

exemple de code avec le modèle de couleur ‘desert’

colorscheme elflord

exemple de code avec le modèle de couleur ‘elflord’

colorscheme evening

exemple de code avec le modèle de couleur ‘evening’

colorscheme habamax

exemple de code avec le modèle de couleur ‘habamax’

colorscheme industry

exemple de code avec le modèle de couleur ‘industry’

colorscheme koehler

exemple de code avec le modèle de couleur ‘koehler’

colorscheme lunaperche

exemple de code avec le modèle de couleur ‘lunaperche’

colorscheme morning

exemple de code avec le modèle de couleur ‘morning’

colorscheme murphy

exemple de code avec le modèle de couleur ‘murphy’

colorscheme pablo

exemple de code avec le modèle de couleur ‘pablo’

colorscheme peachpuff

exemple de code avec le modèle de couleur ‘peachpuff’

colorscheme quiet

exemple de code avec le modèle de couleur ‘quiet’

colorscheme ron

exemple de code avec le modèle de couleur ‘ron’

colorscheme shine

exemple de code avec le modèle de couleur ‘shine’

colorscheme slate

exemple de code avec le modèle de couleur ‘slate’

colorscheme torte

exemple de code avec le modèle de couleur ‘torte’

colorscheme zellner

exemple de code avec le modèle de couleur ‘zellner’

1. Créer sa palette

Pour des catégories de mots, il est possible de définir, pour un terminal à 8, 16, ou 256 couleurs :

Pour une interface graphique ou un terminal acceptant les 16Mi couleurs :

Une première ligne précise les couleurs par défaut pour les caractères et le fond :

hi Normal guifg=#000000 guibg=#ffffff

Les parties d'un script ou d'un fichier source sont réparties en plusieurs catégories et sous catégories. Il est possible de ne définir que les catégories, les sous-catégories étant automatiquement concernées. Définir ces dernières permet de raffiner les distinctions.

Ces catégories sont insensibles à la casse. On ne peut pas utiliser les mots none, all, allbut, contains ou contained

D'autres directives permettent de colorer les à-côté du script :

Il est possible d'interroger Vim sur la nature d'une expression en y positionnant le curseur et

:echo synIDattr(synID(line('.'), col('.'), 1), 'name')

qui fournit la catégorie du mot désigné.

" ~/.vim/colors/colorix.vim
hi clear
if exists("syntax_on")
 syntax reset
endif
let g:colors_name = "colorix"

if has('termguicolors')
 set termguicolors
endif

hi Normal ctermfg=255 ctermbg=0 guifg=#d7d7d7 guibg=#000000 " tout ce qui n'est pas ce qui suit
hi Comment ctermfg=8 cterm=italic guifg=#888a85 gui=italic  " commentaires
hi Constant ctermfg=214 guifg=#fcaf3e
hi String ctermfg=33 guifg=#0087ff      " chaines
hi Number ctermfg=160 guifg=#d70000     " nombres entier ou float
hi Identifier ctermfg=180 guifg=#e9b96e

hi Function ctermfg=71 guifg=#33bb44    " fonctions intégrées ou définies
hi Statement ctermfg=208 guifg=#f57900  " instructions
hi Keyword ctermfg=166 guifg=#d75f00
hi PreProc ctermfg=139 guifg=#ad7fa8
hi Type ctermfg=214 guifg=#fcaf3e
hi Special ctermfg=160 guifg=#ef2929    " caractères spéciaux \n, \t...
hi Todo ctermfg=0 ctermbg=11 guifg=#000000 guibg=#fcd94f
hi LineNr ctermfg=221 guifg=#d7d760    " numéros de ligne

hi CursorLineNr ctermfg=220 guifg=#ffff87
hi CursorLine ctermbg=235 guibg=#303030

hi! Float ctermfg=180 guifg=#d7af87    " voir plus bas

" Lien vers groupes syntaxiques courants
hi! link pythonFloat Float
hi! link pythonNumber Number
hi! link pythonString String

J'ai ajouté quelques commandes spécifiques à python :

" ~/.vim/after/syntax/python.vim

" Supprime les définitions existantes si besoin
syntax clear pythonFloat

" Redéfinit les float
syntax match pythonFloat /\<\d\+\.\d*\>/ " pas de chiffre obligatoire après le point
syntax match pythonFloat /\<\d*\.\d\+\>/ " pas de chiffre obligatoire avant le point
syntax match pythonFloat /\<\d\+\.\d\+e[+-]\=\d\+\>/ containedin=pythonNumber " exposant

" Applique la couleur liée au groupe Float
hi default link pythonFloat Float

syntax keyword pythonBoolean True False None  " les booléens et None ont une couleur propre
hi pythonBoolean ctermfg=129 guifg=#af5fff

Correspondance hexadécimale des 256 couleurs ANSI

Les nombres de 0 à 255 sont utilisables sur les consoles ANSI, les très anciens système ne connaissent que les seize, voire les huit premières. Ces nombres sont utilisé avec ctermfg pour la couleur des caractères, et ctermbg pour le fond.

Les codes hexadécimaux valent pour les éditeurs sous interface graphiques et les consoles si Vim a été compilé avec l'option termguicolor. Il est possible de s'en assurer avec :set termguicolors? : si la réponse est termguicolors, c'est que le terminal permet les nuances des 16Mi de couleurs.

Les seize teintes canoniques

  0 #000000   1 #800000   2 #008000   3 #808000   4 #000080   5 #800080   6 #008080   7 #c0c0c0
  8 #808080   9 #ff0000  10 #00ff00  11 #ffff00  12 #0000ff  13 #ff00ff  14 #00ffff  15 #ffffff

Huit teintes figurent dans les deux parties du tableau : 0 et 16, 9 et 196, 10 et 46, 11 et 226, 12 et 21, 13 et 201, 14 et 51, ainsi que 15 et 231.

Les 240 suivantes

 16 #000000  17 #00005f  18 #000087  19 #0000af  20 #0000d7  21 #0000ff
 22 #005f00  23 #005f5f  24 #005f87  25 #005faf  26 #005fd7  27 #005fff
 28 #008700  29 #00875f  30 #008787  31 #0087af  32 #0087d7  33 #0087ff
 34 #00af00  35 #00af5f  36 #00af87  37 #00afaf  38 #00afd7  39 #00afff
 40 #00d700  41 #00d75f  42 #00d787  43 #00d7af  44 #00d7d7  45 #00d7ff
 46 #00ff00  47 #00ff5f  48 #00ff87  49 #00ffaf  50 #00ffd7  51 #00ffff
 52 #5f0000  53 #5f005f  54 #5f0087  55 #5f00af  56 #5f00d7  57 #5f00ff
 58 #5f5f00  59 #5f5f5f  60 #5f5f87  61 #5f5faf  62 #5f5fd7  63 #5f5fff
 64 #5f8700  65 #5f875f  66 #5f8787  67 #5f87af  68 #5f87d7  69 #5f87ff
 70 #5faf00  71 #5faf5f  72 #5faf87  73 #5fafaf  74 #5fafd7  75 #5fafff
 76 #5fd700  77 #5fd75f  78 #5fd787  79 #5fd7af  80 #5fd7d7  81 #5fd7ff
 82 #5fff00  83 #5fff5f  84 #5fff87  85 #5fffaf  86 #5fffd7  87 #5fffff
 88 #870000  89 #87005f  90 #870087  91 #8700af  92 #8700d7  93 #8700ff
 94 #875f00  95 #875f5f  96 #875f87  97 #875faf  98 #875fd7  99 #875fff
100 #878700 101 #87875f 102 #878787 103 #8787af 104 #8787d7 105 #8787ff
106 #87af00 107 #87af5f 108 #87af87 109 #87afaf 110 #87afd7 111 #87afff
112 #87d700 113 #87d75f 114 #87d787 115 #87d7af 116 #87d7d7 117 #87d7ff
118 #87ff00 119 #87ff5f 120 #87ff87 121 #87ffaf 122 #87ffd7 123 #87ffff
124 #af0000 125 #af005f 126 #af0087 127 #af00af 128 #af00d7 129 #af00ff
130 #af5f00 131 #af5f5f 132 #af5f87 133 #af5faf 134 #af5fd7 135 #af5fff
136 #af8700 137 #af875f 138 #af8787 139 #af87af 140 #af87d7 141 #af87ff
142 #afaf00 143 #afaf5f 144 #afaf87 145 #afafaf 146 #afafd7 147 #afafff
148 #afd700 149 #afd75f 150 #afd787 151 #afd7af 152 #afd7d7 153 #afd7ff
154 #afff00 155 #afff5f 156 #afff87 157 #afffaf 158 #afffd7 159 #afffff
160 #d70000 161 #d7005f 162 #d70087 163 #d700af 164 #d700d7 165 #d700ff
166 #d75f00 167 #d75f5f 168 #d75f87 169 #d75faf 170 #d75fd7 171 #d75fff
172 #d78700 173 #d7875f 174 #d78787 175 #d787af 176 #d787d7 177 #d787ff
178 #d7af00 179 #d7af5f 180 #d7af87 181 #d7afaf 182 #d7afd7 183 #d7afff
184 #d7d700 185 #d7d75f 186 #d7d787 187 #d7d7af 188 #d7d7d7 189 #d7d7ff
190 #d7ff00 191 #d7ff5f 192 #d7ff87 193 #d7ffaf 194 #d7ffd7 195 #d7ffff
196 #ff0000 197 #ff005f 198 #ff0087 199 #ff00af 200 #ff00d7 201 #ff00ff
202 #ff5f00 203 #ff5f5f 204 #ff5f87 205 #ff5faf 206 #ff5fd7 207 #ff5fff
208 #ff8700 209 #ff875f 210 #ff8787 211 #ff87af 212 #ff87d7 213 #ff87ff
214 #ffaf00 215 #ffaf5f 216 #ffaf87 217 #ffafaf 218 #ffafd7 219 #ffafff
220 #ffd700 221 #ffd75f 222 #ffd787 223 #ffd7af 224 #ffd7d7 225 #ffd7ff
226 #ffff00 227 #ffff5f 228 #ffff87 229 #ffffaf 230 #ffffd7 231 #ffffff
232 #080808 233 #121212 234 #1c1c1c 235 #262626 236 #303030 237 #3a3a3a
238 #444444 239 #4e4e4e 240 #585858 241 #626262 242 #6c6c6c 243 #767676
244 #808080 245 #8a8a8a 246 #949494 247 #9e9e9e 248 #a8a8a8 249 #b2b2b2
250 #bcbcbc 251 #c6c6c6 252 #d0d0d0 253 #dadada 254 #e4e4e4 255 #eeeeee