J'essaie de corriger la coloration syntaxique pour python; mes couleurs sont différentes de celles des captures d'écran de ce à quoi cela "devrait" ressembler dans différents schémas de couleurs vim. Et vous pouvez voir la différence en comparant .rb (qui s'affiche correctement) à .py, qui semble être désactivé:
Par exemple, remarquez comment self
n'est pas mis en surbrillance. (C'est en base16, mais la comparaison serait similaire dans d'autres schémas de couleurs). Généralement, il semble que la mise en évidence de la syntaxe de l'objet soit incorrecte.
Certaines choses que j'ai essayées:
- En regardant les scripts de syntaxe, les charges vim; la seule différence entre .py et .rb dans l'exemple ci-dessous est que, bien sûr, ruby obtient indent / ruby.vim et syntaxe / ruby.vim tandis que python obtient indent / python.vim et syntax / python.vim. Ce sont les fichiers fournis avec homebrew vim.
- Charger les mêmes fichiers dans macvim plutôt que sur terminal (iterm2) vim; même problème, les fichiers sont exactement les mêmes que dans l'image.
- Ajout du nouveau fichier python.vim . Ne résout pas le problème, même s'il est utilisé comme
.vim/after
script.
Toutes les suggestions sont les bienvenues; Je me suis cogné la tête pendant des heures et je n'arrive pas à comprendre pourquoi la mise en évidence ne fonctionne pas comme prévu.
Réponses:
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èsdef
devrait augmenter le niveau d'indentation" et "la ligne aprèsend
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 aussiFunction
ou autre chose. PourquoiType
? 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 faireself = "foo"
oudef 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:est vraiment "traduit" par Python en:
Le nom
self
est juste une convention (presque universellement adopté) mais vous pouvez le nommer comme bon vous semble;def x(this):
oudef x(xxx):
sont également valables. Vous pouvez également utiliser le nomself
où vous le souhaitez;self = 'foo'
etdef 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 (commestr
). Il n'y a aucune trace du motself
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:Le
pythonBuiltin
nom du groupe est déjà défini dans le fichier de syntaxe par défaut et lié auFunction
groupe de surbrillance. Pour utiliser un nouveau groupe de surbrillance, utilisez quelque chose comme: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:Utilisez le
after-directory
,~/.vim/after/syntax/python.vim
:Les deux méthodes sont effectivement les mêmes. Utilisez celui que vous préférez.
la source