Dodawanie dodatkowego podświetlenia składni do nvim; nie można pobrać pliku .config / nvim / after / syntax, aby załadować plik .vim
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.vim
do ~/.config/nvim/after/syntax
folderu, ale mój nvim go nie odbiera.
Rzeczy, których próbowałem:
- Sprawdź, czy
~/.config/nvim/after
i / lub~/.config/nvim/after/syntax
jest dodany do mojej ścieżki środowiska wykonawczego.
- Tylko
~/.config/nvim/after
jest dodawany do mojej ścieżki - zaznaczone:set rtp
>>runtimepath=~...,...,~/.config/nvim/after
- jednak nie widzę załadowanego pliku:scriptnames
. Jak mogę załadować plik?
- Zmień lokalizację pliku na
~/.config/nvim/after
zamiast~/.config/nvim/after/syntax
- To też nie działa.
- Ręcznie załaduj plik.
- To rzeczywiście robi pracę zaskakująco. Mogę ręcznie zmienić składnię pliku, używając
:set syntax=fstrings
jednak, 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
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.vim
lub 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.fstrings
najpierw załaduje, syntax/python.vim
a 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 *.vim
skrypt 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.