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. Cette page est un complément de celle consacrée à l'éditeur Vim
Cette page suit les recommandations de 1990 pour une orthographe réformée.
1. Palettes standard • 2. Palette maison • 3. Couleurs ANSI-256
1. Palettes fournies
Sur un système de type Unix, les différents thèmes de coloration syntaxiques proposés par vim sont stockés à une adresse qui ressemble à /usr/share/vim/vim90/colors (90 pour vim 9.0).
Pour bénéficier de la coloration syntaxique, :syntax on et :colorscheme nom-du-thème doivent avoir été saisis en ligne d'exécution ou figurer dans le fichier .vimrc. Il semble également que la coloration syntaxique ne fonctionne que lorsque le fichier édité est sauvegardé avec une extension reconnue par vim : .py, .php, .c…
colorscheme blue
colorscheme darkblue
colorscheme default
colorscheme delek
colorscheme desert
colorscheme elflord
colorscheme evening
colorscheme habamax
colorscheme industry
colorscheme koehler
colorscheme lunaperche
colorscheme morning
colorscheme murphy
colorscheme pablo
colorscheme peachpuff
colorscheme quiet
colorscheme ron
colorscheme shine
colorscheme slate
colorscheme torte
colorscheme zellner
2. Créer sa palette
Pour des catégories de mots, il est possible de définir, pour un terminal à 8, 16, ou 256 couleurs :
- ctermfg=255 couleur des caractères (gris très clair) pour un terminal ANSI-256 couleurs ; limité à ctermfg=7 ou ctermfg=15 selon la capacité du terminal.
- ctermbg=0 couleur du fond (noir)
- cterm= permet italic, bold, underline... pour un terminal, bold signifie une légère surbrillance
Pour une interface graphique ou un terminal acceptant les 16Mi couleurs :
- guifg=#d7d7d7 couleur du caractère
- guibg=#000000 couleur du fond
- gui= permet italic, bold, underline...
2. Description des catégories
Une première ligne précise les couleurs par défaut pour les caractères et le fond (hi est l'abréviation de highlight) :
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.
- Comment tout commentaire
- Constant toute constante
- String une chaine
- Character une constante char (un octet), w, \n
- Number un nombre entier : 234, 0xff
- Boolean un booléen : TRUE, false
- Float un nombre décimal : 3.14, 1.3e-43
- Identifier pour les noms de variable, si distinguable ($var pour PHP)
- Function pour les noms de fonction ou de méthode de classe
- Statement instructions
- Conditional les conditions if, then, else, endif, switch, etc.
- Repeat les répétitions for, do, while, etc.
- Label les étiquettes case, default, etc.
- Operator les ppérateurs "sizeof", "+", "*", etc.
- Keyword les autres keyword
- Exception les exceptions try, catch, throw
- PreProc tout préprocesseur
- Include préprocesseur #include
- Define préprocesseur #define
- Macro comme Define
- PreCondit préprocesseur #if, #else, #endif, etc.
- Type int, long, char, etc.
- StorageClass static, register, volatile, etc.
- Structure struct, union, enum, etc.
- Typedef A typedef
- Special les symboles spéciaux comme \t \n
- SpecialChar un caractère spécial dans une constante
- Tag you can use CTRL-] on this
- Delimiter charactère qui nécessite une attention
- SpecialComment quelque chose de spécial dans un commentaire
- Debug debugging statements
- Underlined liens HTML
- Ignore laissé caché |hl-Ignore|
- Error construction erronée
- Todo ce qui nécessite une attention particulière, comme Note, TODO FIXME and XXX
Ces catégories sont insensibles à la casse.
D'autres directives permettent de colorer les à-côté du script :
- LineNr numéros de ligne
- CursorLineNr le numéro de la ligne activée (cterm ou gui=NONE pour désactiver le souligné)
- CursorLine coloration de la ligne courante, cterm ou gui=NONE pour désactiver le souligné, :set CursorLine doit être actif
- CursorColumn, :set CursoColumn doit être actif
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é.
2. Exemple d'une palette
Les fichiers de coloration syntaxique peuvent être placés dans le répertoire ~/.vim/colors/ (/home/titi/.vim/colors/ pour le compte titi).
" ~/.vim/colors/colorix.vim " author : Jean-Christophe Beumier -- ver 0.1 - 2025.06.30 -- in progress " License GPLv3 -- https://www.gnu.org/licenses/gpl-3.0.en.html 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 " comments hi Constant ctermfg=214 guifg=#fcaf3e " general category hi Number ctermfg=160 guifg=#d70000 " numbers, integers or floats hi String ctermfg=33 guifg=#0087ff " strings hi Identifier ctermfg=180 guifg=#e9b96e " ? hi Function ctermfg=71 guifg=#33bb44 " functions, buitin or user-edited hi Statement ctermfg=208 guifg=#f57900 " general category hi Keyword ctermfg=166 guifg=#d75f00 hi PreProc ctermfg=139 guifg=#ad7fa8 hi Type ctermfg=214 guifg=#fcaf3e hi Special ctermfg=160 guifg=#ef2929 " \n, \t... hi Todo ctermfg=0 ctermbg=11 guifg=#000000 guibg=#fcd94f " hi LineNr ctermfg=221 guifg=#d7d760 " line numbers (left column) hi CursorLineNr ctermfg=220 guifg=#ffff87 " only with :set cursorline (underline) hi CursorLine ctermbg=235 guibg=#303030 " only with :set cursorline (underline) hi CursorColumn ctermbg=235 guibg=#303030 " only with :set cursorcolumn 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 ; un tel fichier doit être placé dans le répertoire after/syntax/python (/home/titi/.vim/after/syntax/python pour le compte titi).
" ~/.vim/after/syntax/python.vim " Supprime les définitions existantes si besoin syntax clear pythonFloat " définit avec une expression régulière ce à quoi correspond un "float" syntax match pythonFloat /\<[+-]?((\d\+\.\d*)|(\d*\.\+\d))([eE][+-]?\d\+)?\>/ " 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
Deux façons de créer de nouvelles catégories, auxquelles on attribuera une couleur spécifique :
- syntax match pythonFloat /\<[+-]?((\d\+\.\d*)|(\d*\.\+\d))([eE][+-]?\d\+)?\>/ en utilisant les expressions régulières ;
- syntax keyword pythonBoolean True False None en définissant les mots-clés
Attention : les catégories créées ne peuvent être nommées none, all, allbut, contains ou contained, ces mots étant réservés.
3. Les 256 couleurs ANSI et leurs correspondance hexadécimales
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és 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 termguicolors. 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 premières teintes
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 216 suivantes
Les 216 teintes qui suivent sont produites par les combinaisons des trois composantes rouge, vert et bleu sur six niveaux : 0x00 (0) ; 0x5f (95) ; 0x87 (135) ; 0xaf (175) ; 0xd7 (215) ; 0xff (255) :
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 |
Les nuances de gris
Les 24 dernières teintes sont composées des valeurs de gris par progression de 10, de #080808 à #eeeeee.
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 |