Hinzufügen von zusätzlichem Syntax-Highlight zu nvim; Die .config / nvim / after / -Syntax kann nicht zum Laden der .vim-Datei verwendet werden
Ich versuche, einem Plugin, das ich für die Syntaxhervorhebung verwende , zusätzliche Syntaxhervorhebungen hinzuzufügen . Ich habe versucht, die zusätzliche Syntaxdatei fstrings.vim
zum ~/.config/nvim/after/syntax
Ordner hinzuzufügen, aber mein NVIM nimmt sie nicht auf.
Dinge, die ich versucht habe:
- Überprüfen Sie, ob
~/.config/nvim/after
und / oder~/.config/nvim/after/syntax
meinem Laufzeitpfad hinzugefügt wurde.
- Nur
~/.config/nvim/after
wird zu meinem Pfad hinzugefügt - markiert mit:set rtp
>>runtimepath=~...,...,~/.config/nvim/after
- ich sehe jedoch nicht, dass die Datei geladen ist:scriptnames
. Wie kann ich die Datei zum Laden bringen?
- Ändern Sie den Speicherort der Datei in
~/.config/nvim/after
anstelle von~/.config/nvim/after/syntax
- Dies funktioniert auch nicht.
- Laden Sie die Datei manuell.
- Das funktioniert tatsächlich überraschend. Ich kann die Syntax der Datei manuell ändern, indem ich
:set syntax=fstrings
jedoch alle vom Plugin bereitgestellten ursprünglichen Syntaxhervorhebungen verschwinde und nur die von den bereitgestellten Hervorhebungen (siehe die Druckanweisung im Bild unten) vonfstrings.vim
verwendet werden. Dies lässt mich glauben, dass der Pfad korrekt eingerichtet ist, nvim ihn jedoch während des Startvorgangs nicht laden möchte und / oder ihn aufgrund des verwendeten Plugins ignoriert.

Ich weiß, dass der /after/
Ordner verwendet wird, um Einstellungen nach vorherigen Einstellungen anzuwenden, anstatt sie zu überschreiben. Ich habe die Lösung hier und hier bereits ausprobiert , aber ich konnte sie nicht zum Laufen bringen. Jede Hilfe zum Debuggen wäre willkommen.
" ~/.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
Antworten
Die Syntaxregeln werden normalerweise nach dem 'filetype'Satz für den Puffer benannt, der wiederum normalerweise erkannt wird (basierend auf Dateierweiterung, Dateiname oder Dateiinhalt) und normalerweise automatisch festgelegt wird.
Wenn Sie die Syntaxhervorhebung für Python erweitern möchten, sollten Sie Ihr Skript normalerweise nach dem "python"
Dateityp benennen.
Wenn Vim Syntaxregeln für Python lädt , gilt dies für Dateien mit dem Namen syntax/python.vim
oder syntax/python/*.vim
(die ftplugin-Regeln berücksichtigen dies ebenfalls python_*.vim
, es stellt sich jedoch heraus, dass dies bei der Syntax nicht der Fall ist.)
Sie sollten also Ihre Datei ~/.config/nvim/after/syntax/python.vim
(oder ~/.config/nvim/after/syntax/python/fstrings.vim
) benennen , damit sie für Python-Dateien geladen wird und nachdem die gebündelten Laufzeitregeln für Python geladen wurden.
Eine andere Option besteht darin, die 'syntax'Option so einzustellen , dass mehrere Typen eingeschlossen sind, die durch einen Punkt getrennt sind. Zum Beispiel :setlocal syntax=python.fstrings
wird zuerst geladen syntax/python.vim
und dann syntax/fstrings.vim
. Dies wäre nützlicher, wenn Sie eine Syntax hätten, die etwas allgemein gehalten ist und für mehrere separate Sprachen sinnvoll sein kann (z. B. einige Syntaxhervorhebungen für ein Dokumentationsformat in Kommentaren?). Sie scheint in diesem Fall nicht sehr zutreffend zu sein , wobei f-Strings im Wesentlichen eine Python-Syntax sind. Es kann auch schwierig sein, eine 'syntax'
von der Einstellung getrennte Einstellung 'filetype'
beizubehalten. Sie muss an der richtigen Stelle eingestellt werden (nicht zu früh oder zu spät), um zu vermeiden, dass die Standardeinstellung überlastet wird.
Während Sie ein solches Problem beheben, bei dem ein Skript von Ihnen nicht geladen wird, können Sie mit dem :scriptnamesBefehl überprüfen, ob Ihr *.vim
Skript tatsächlich irgendwann von Vim geladen wurde. Wiederholen Sie diesen Vorgang vor und nach dem Öffnen einer Datei des gewünschten Dateityps, um zu bestätigen, dass sie durch diese Dateityperkennung ausgelöst wurde.