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
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
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 :
- 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 pour un terminal ANSI-256 couleurs
- cterm= permet italic, bold, underline
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
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.
- Comment tout commentaire
- Constant toute constante
- String une chaine
- Character une constante char, c, \n
- Number un nombre entier : 234, 0xff
- Boolean un booleé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 statement
- 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. On ne peut pas utiliser les mots none, all, allbut, contains ou contained
D'autres directives permettent de colorer les à-côté du script :
- LineNr numéros de ligne
- CursorLineNr
- CursorLine
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 |