Dodawanie dodatkowego podświetlenia składni do nvim; nie można pobrać pliku .config / nvim / after / syntax, aby załadować plik .vim

Jan 12 2021

Próbuję dodać dodatkowe podświetlanie składni do wtyczki, której używam do podświetlania składni. Próbowałem dodać dodatkowy plik składni fstrings.vimdo ~/.config/nvim/after/syntaxfolderu, ale mój nvim go nie odbiera.

Rzeczy, których próbowałem:

  1. Sprawdź, czy ~/.config/nvim/afteri / lub ~/.config/nvim/after/syntaxjest dodany do mojej ścieżki środowiska wykonawczego.
  • Tylko ~/.config/nvim/afterjest dodawany do mojej ścieżki - zaznaczone :set rtp>> runtimepath=~...,...,~/.config/nvim/after- jednak nie widzę załadowanego pliku :scriptnames. Jak mogę załadować plik?
  1. Zmień lokalizację pliku na ~/.config/nvim/afterzamiast~/.config/nvim/after/syntax
  • To też nie działa.
  1. Ręcznie załaduj plik.
  • To rzeczywiście robi pracę zaskakująco. Mogę ręcznie zmienić składnię pliku, używając :set syntax=fstringsjednak, całe oryginalne podświetlenie składni zapewniane przez wtyczkę znika i używane jest tylko wyróżnienie dostarczone (zobacz instrukcję print na obrazku poniżej) fstrings.vim. To prowadzi mnie do przekonania, że ​​ścieżka jest poprawnie skonfigurowana, jednak nvim nie chce jej ładować podczas uruchamiania i / lub ignoruje ją z powodu używanej wtyczki.

Wiem, że /after/folder jest używany do stosowania ustawień po poprzednich ustawieniach, a nie do nadpisywania. Wypróbowałem już rozwiązanie tutaj i tutaj, ale nie udało mi się to zrobić. Każda pomoc w tym, jak to debugować, będzie mile widziana.

" ~/.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

Odpowiedzi

1 filbranden Jan 13 2021 at 07:17

Reguły składni są zwykle nazywane zgodnie z 'filetype'zestawem dla bufora, który z kolei jest zwykle wykrywany (na podstawie rozszerzenia pliku, nazwy pliku lub zawartości pliku) i zwykle ustawiany automatycznie.

Jeśli chcesz rozszerzyć podświetlanie składni dla Pythona, zwykle powinieneś nazwać swój skrypt po "python"typie pliku.

Kiedy Vim ładuje reguły składniowe dla Pythona, zrobi to dla plików o nazwie syntax/python.vimlub syntax/python/*.vim(reguły ftplugin również na to pozwalają python_*.vim, ale okazuje się, że tak nie jest w przypadku składni).

Dlatego powinieneś nazwać swój plik ~/.config/nvim/after/syntax/python.vim(lub ~/.config/nvim/after/syntax/python/fstrings.vim), aby został załadowany dla plików Pythona i po załadowaniu dołączonych reguł środowiska wykonawczego dla Pythona.


Inną opcją jest ustawienie 'syntax'opcji obejmującej wiele typów oddzielonych kropką. Na przykład :setlocal syntax=python.fstringsnajpierw załaduje, syntax/python.vima następnie syntax/fstrings.vim. Byłoby to bardziej przydatne, gdybyś miał część składni, która jest nieco ogólna i może mieć sens dla wielu oddzielnych języków (na przykład niektóre podświetlanie składni w formacie dokumentacji w komentarzach?). Wydaje się, że nie ma to dużego zastosowania w tym przypadku , gdzie f-stringi są zasadniczo składnią Pythona. Utrzymanie 'syntax'ustawienia oddzielnego od tego 'filetype'może być również trudne, należy je ustawić we właściwej lokalizacji (nie za wcześnie ani za późno), aby uniknąć uderzenia przez ustawienie domyślne.


Podczas rozwiązywania problemu z nie ładowaniem twojego skryptu, możesz użyć :scriptnamespolecenia, aby sprawdzić, czy twój *.vimskrypt został faktycznie załadowany przez Vima w którymś momencie. Powtórz to przed i po otwarciu pliku o określonym typie pliku, którego szukasz, aby potwierdzić, że został uruchomiony przez wykrywanie tego typu pliku.