Comment fonctionne la coloration syntaxique en bref:
Dans syntax/<filetype>.vim
la syntaxe, les règles sont définies avec la :syntax
commande. Cette commande définit, eh bien, la syntaxe. Il dit "si le texte correspond à cette expression régulière, c'est une chaîne", etc. Pour ce faire, il attribue un groupe de surbrillance . Il ne pas dire quoi que ce soit sur les couleurs en tant que telles.
:highlight
dit "surlignez ce groupe avec ces couleurs". Cela se fait dans le jeu de couleurs , pas dans le fichier de syntaxe. Il y a un tas de groupes de surbrillance par défaut ( String
, Function
, Special
, et ainsi de suite) que tous les schémas de couleurs devraient définir.
Vous n'êtes cependant pas limité à ces groupes par défaut, et vous pouvez créer autant de groupes que vous le souhaitez (mais les fichiers de syntaxe par défaut ne le font généralement pas).
Le indent/<filetype>.vim
fichier contrôle l'indentation automatique. Par exemple, pour Ruby, il est indiqué que "la ligne après def
devrait augmenter le niveau d'indentation" et "la ligne après end
devrait diminuer l'indentation d'un niveau". Il ne fait rien avec les couleurs ou la coloration syntaxique.
Pourquoi différents langages de programmation sont-ils mis en évidence différemment? En partie à cause de l'esthétique personnelle et des opinions de celui qui l'a écrit. Par exemple, dans Ruby, le Type
groupe de surbrillance est utilisé pour les noms de classe. Mais ça aurait pu l'être aussi Function
ou autre chose. Pourquoi Type
? Probablement parce que l'auteur pensait que cela semblait mieux dans sa palette de couleurs.
Mais plus important encore, les langues ont des sémantiques et des sensibilités différentes. En Ruby, self
est un mot-clé spécial. Vous ne pouvez pas faire self = "foo"
ou def self()
. Ce sont des erreurs. Mais ce n'est pas le cas en Python. C'est juste une autre variable sans propriétés spéciales. Faire:
x = Object()
x.foo()
est vraiment "traduit" par Python en:
Object.foo(x)
Le nom self
est juste une convention (presque universellement adopté) mais vous pouvez le nommer comme bon vous semble; def x(this):
ou def x(xxx):
sont également valables. Vous pouvez également utiliser le nom self
où vous le souhaitez; self = 'foo'
et def self():
sont parfaitement bien.
Je dirais que cela self
ne devrait pas être mis en évidence, car ce n'est ni un mot-clé spécial, ni une variable prédéfinie (comme str
). Il n'y a aucune trace du mot self
dans le fichier de syntaxe, il semble donc que son auteur ait raisonné de la même manière :-)
Si vous voulez self
mettre en évidence, vous devrez créer une règle de syntaxe pour cela:
:syn keyword pythonBuiltin self
Le pythonBuiltin
nom du groupe est déjà défini dans le fichier de syntaxe par défaut et lié au Function
groupe de surbrillance. Pour utiliser un nouveau groupe de surbrillance, utilisez quelque chose comme:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
Pour effectuer ces modifications, vous ne pouvez pas simplement les coller dans votre fichier vimrc. Le fichier de syntaxe le remplacera. Au lieu de cela, vous devrez l'exécuter après le chargement du fichier de syntaxe, ce que vous pouvez faire de deux manières:
Utilisez un FileType
autocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
Utilisez le after-directory
, ~/.vim/after/syntax/python.vim
:
syn keyword pythonSelf self
highlight def link pythonSelf Special
Les deux méthodes sont effectivement les mêmes. Utilisez celui que vous préférez.