Ajout de surbrillance de syntaxe supplémentaire à nvim; impossible d'obtenir la syntaxe .config / nvim / after / pour charger le fichier .vim

Jan 12 2021

J'essaie d'ajouter une coloration syntaxique supplémentaire à un plugin que j'utilise pour la coloration syntaxique. J'ai essayé d'ajouter le fichier de syntaxe supplémentaire fstrings.vimau ~/.config/nvim/after/syntaxdossier mais mon nvim ne le récupère pas.

Les choses que j'ai essayées:

  1. Vérifiez si ~/.config/nvim/afteret / ou ~/.config/nvim/after/syntaxest ajouté à mon chemin d'exécution.
  • Seul ~/.config/nvim/afterest ajouté à mon chemin - vérifié avec :set rtp>> runtimepath=~...,...,~/.config/nvim/after- mais je ne vois pas le fichier chargé :scriptnames. Comment puis-je charger le fichier?
  1. Remplacez l'emplacement du fichier par au ~/.config/nvim/afterlieu de~/.config/nvim/after/syntax
  • Cela ne fonctionne pas non plus.
  1. Chargez manuellement le fichier.
  • Cela fonctionne en fait de manière surprenante. Je peux modifier manuellement la syntaxe du fichier en utilisant :set syntax=fstringscependant, toute la coloration syntaxique d'origine fournie par le plugin disparaît, et seule la mise en évidence fournie (voir l'instruction d'impression dans l'image ci-dessous) par le fstrings.vimest utilisée. Cela me porte à croire que le chemin est correctement configuré, mais nvim ne veut pas le charger au démarrage et / ou l'ignore à cause du plugin utilisé.

Je sais que le /after/dossier est utilisé pour appliquer les paramètres après les paramètres précédents, plutôt que pour l'écrasement. J'ai déjà essayé la solution ici et ici mais je n'ai pas réussi à la faire fonctionner. Toute aide sur la façon de déboguer ceci serait appréciée.

" ~/.config/nvim/after/syntax/fstrings.vim

syn match pythonEscape +{{+ contained containedin=pythonfString,pythonfDocstring
syn match pythonEscape +}}+ contained containedin=pythonfString,pythonfDocstring

syn region pythonfString matchgroup=pythonQuotes
      \ start=+[fF]\@1<=\z(['"]\)+ end="\z1"
      \ contains=@Spell,pythonEscape,pythonInterpolation
syn region pythonfDocstring matchgroup=pythonQuotes
      \ start=+[fF]\@1<=\z('''\|"""\)+ end="\z1" keepend
      \ contains=@Spell,pythonEscape,pythonSpaceError,pythonInterpolation,pythonDoctest

syn region pythonInterpolation contained
      \ matchgroup=SpecialChar
      \ start=+{{\@!+ end=+}}\@!+ skip=+{{+ keepend
      \ contains=ALLBUT,pythonDecoratorName,pythonDecorator,pythonFunction,pythonDoctestValue,pythonDoctest

syn match pythonStringModifier /:\(.[<^=>]\)\?[-+ ]\?#\?0\?[0-9]*[_,]\?\(\.[0-9]*\)\?[bcdeEfFgGnosxX%]\?/ contained containedin=pythonInterpolation
syn match pythonStringModifier /![sra]/ contained containedin=pythonInterpolation

hi link pythonfString String
hi link pythonfDocstring String
hi link pythonStringModifier PreProc

Réponses

1 filbranden Jan 13 2021 at 07:17

Les règles de syntaxe sont généralement nommées d'après l' 'filetype'ensemble du tampon, qui à son tour est généralement détecté (en fonction de l'extension de fichier, du nom de fichier ou du contenu du fichier) et généralement définies automatiquement.

Si vous souhaitez étendre la coloration syntaxique pour Python, vous devez généralement nommer votre script après le type de "python"fichier.

Lorsque Vim charge les règles de syntaxe pour Python, il le fera pour les fichiers nommés syntax/python.vimou syntax/python/*.vim(les règles ftplugin le permettent également python_*.vim, mais il s'avère que ce n'est pas le cas pour la syntaxe.)

Vous devez donc nommer votre fichier ~/.config/nvim/after/syntax/python.vim(ou ~/.config/nvim/after/syntax/python/fstrings.vim) afin de le charger pour les fichiers Python et après le chargement des règles d'exécution groupées pour Python.


Une autre option consiste à définir l' 'syntax'option pour inclure plusieurs types, séparés par un point. Par exemple, :setlocal syntax=python.fstringsva d'abord charger syntax/python.vim, puis syntax/fstrings.vim. Cela serait plus utile si vous aviez un morceau de syntaxe qui est quelque peu générique et qui peut avoir du sens pour plusieurs langues distinctes (par exemple, une coloration syntaxique d'un format de documentation dans des commentaires?) Cela ne semble pas très applicable dans ce cas , où les f-strings sont essentiellement une syntaxe Python. Maintenir un 'syntax'paramètre séparé de celui- 'filetype'ci peut également être délicat, il doit être défini au bon endroit (ni trop tôt ni trop tard) pour éviter d'être écrasé par le paramètre par défaut.


Lors du dépannage d'un tel problème de non-chargement de :scriptnamesvotre *.vimscript , vous pouvez utiliser la commande pour vérifier si votre script a réellement été chargé par Vim à un moment donné. Répétez cela avant et après l'ouverture d'un fichier du type de fichier spécifique que vous recherchez pour confirmer qu'il a été déclenché par cette détection de type de fichier.