Cependant, après avoir ajouté ces lignes dans le .vimrc, cela n'a pas fonctionné.
La raison en est que Vim efface les éléments de syntaxe existants lors de la définition de l' 'syntax'
option. Cela est dû au fait que conserver les anciens éléments de syntaxe entraînerait des situations étranges; si vous avez un tampon qui a syntax=foo
et utilisez set syntax=bar
alors vous vous retrouverez avec un tampon qui a une coloration syntaxique pour les deux foo
et bar
.
Lorsque Vim démarre, il charge votre vimrc
fois (au démarrage), mais il charge les fichiers de type de fichier et de syntaxe à chaque fois que les options filetype
ou syntax
sont définies, ce qui réinitialisera les valeurs que vous avez définies dans votre vimrc.
Même s'il ne le réinitialisait pas, ce ne serait pas une bonne idée de simplement l'ajouter à votre vimrc, car il s'appliquerait à tous les tampons, et pas seulement aux tampons avec syntax=c
.
Le texte ci-dessous suppose Vim sur un système Unix-y, mais cela fonctionnera également pour les utilisateurs Neovim et Windows:
- Les utilisateurs de Neovim doivent remplacer
~/.vim/
par ~/.config/nvim/
.
- Les utilisateurs de Windows doivent remplacer
~/.vim/
par %USERPROFILE%\vimfiles\
.
Remplacement d'un fichier entier
Le moyen le plus simple de changer quelque chose est de simplement le remplacer . Pour ce faire, créez un fichier dans ~/.vim/<file>.vim
.
<file.vim>
est le chemin relatif à $VIMRUNTIME
(y compris les sous-répertoires). Dans votre exemple, ça devrait l'être syntax/c.vim
. Il sera chargé à la place du fichier dans $VIMRUNTIME
.
Le résultat est qu'il est plus facile d'apporter des modifications - la modification des fichiers de syntaxe existants peut parfois être un peu délicate. L'inconvénient est que vous n'obtiendrez aucune future mise à jour du fichier à l'échelle du système.
Je l'utilise souvent comme point de départ pour expérimenter avec des fichiers de syntaxe, puis extraire plus tard mes modifications locales vers un ajout local en utilisant l'une des méthodes décrites ci-dessous.
Ajouts locaux
Il existe deux façons d'ajouter des ajouts locaux aux fichiers de syntaxe, ils sont fonctionnellement identiques et vous pouvez utiliser la méthode que vous préférez.
Syntax
autocmd
Utilisez l' Syntax
autocmd:
augroup ft_c
autocmd!
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
autocmd Syntax c syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
autocmd Syntax c hi cFunction gui=NONE guifg=#B5A1FF
augroup end
Notez que l'enchaînement de plusieurs commandes avec |
est problématique ici, car elles ont tendance à être interprétées comme faisant partie de la :syn
commande, c'est pourquoi j'ai répété autocmd Syntax c
plusieurs fois. Une alternative serait d'utiliser une fonction:
fun s:c()
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>[^()]*)("me=e-2
syn match cFunction "\<[a-zA-Z_][a-zA-Z_0-9]*\>\s*("me=e-1
hi cFunction gui=NONE guifg=#B5A1FF
endfun
augroup ft_c
autocmd!
autocmd Syntax c call s:c()
augroup end
L'avantage est que toutes les modifications peuvent être contenues dans un seul fichier. L'inconvénient est que c'est un peu moche, surtout si vous avez beaucoup de changements.
après répertoire
Utilisez le répertoire après: ~/.vim/after/<file>.vim
.
Celui-ci sera chargé après <file>.vim
has, où <file.vim>
est le chemin par rapport à $VIMRUNTIME
(y compris les sous-répertoires). Dans votre exemple, ça devrait l'être syntax/c.vim
.
Voir aussi :help after-directory
.
L'avantage est qu'il est un peu plus lisible que l'autocmd, surtout si vous avez beaucoup de changements. L'inconvénient est que vous devrez copier sur un fichier supplémentaire si vous souhaitez mettre en miroir votre configuration Vim sur différentes machines (c'est une raison importante pour laquelle de nombreuses personnes conservent leurs fichiers Vim dans un référentiel GitHub, afin qu'elles puissent être facilement reproduites sur plusieurs machines). ).
~/.vim/after/syntax/c.vim
place.