Hinzufügen von zusätzlichem Syntax-Highlight zu nvim; Die .config / nvim / after / -Syntax kann nicht zum Laden der .vim-Datei verwendet werden

Jan 12 2021

Ich versuche, einem Plugin, das ich für die Syntaxhervorhebung verwende , zusätzliche Syntaxhervorhebungen hinzuzufügen . Ich habe versucht, die zusätzliche Syntaxdatei fstrings.vimzum ~/.config/nvim/after/syntaxOrdner hinzuzufügen, aber mein NVIM nimmt sie nicht auf.

Dinge, die ich versucht habe:

  1. Überprüfen Sie, ob ~/.config/nvim/afterund / oder ~/.config/nvim/after/syntaxmeinem Laufzeitpfad hinzugefügt wurde.
  • Nur ~/.config/nvim/afterwird 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?
  1. Ändern Sie den Speicherort der Datei in ~/.config/nvim/afteranstelle von~/.config/nvim/after/syntax
  • Dies funktioniert auch nicht.
  1. Laden Sie die Datei manuell.
  • Das funktioniert tatsächlich überraschend. Ich kann die Syntax der Datei manuell ändern, indem ich :set syntax=fstringsjedoch alle vom Plugin bereitgestellten ursprünglichen Syntaxhervorhebungen verschwinde und nur die von den bereitgestellten Hervorhebungen (siehe die Druckanweisung im Bild unten) von fstrings.vimverwendet 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

1 filbranden Jan 13 2021 at 07:17

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.vimoder 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.fstringswird zuerst geladen syntax/python.vimund 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 *.vimSkript 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.