Добавление дополнительной подсветки синтаксиса в nvim; не удается получить .config / nvim / after / syntax для загрузки файла .vim
Я пытаюсь добавить дополнительную подсветку синтаксиса к плагину, который использую для выделения синтаксиса. Я попытался добавить дополнительный файл синтаксиса fstrings.vim
в ~/.config/nvim/after/syntax
папку , но мой nvim не поднимая его вверх.
Вещи, которые я пробовал:
- Проверьте, добавлен ли
~/.config/nvim/after
и / или~/.config/nvim/after/syntax
в мой путь выполнения.
- Только
~/.config/nvim/after
добавляется к моему пути - отмечен знаком:set rtp
>>runtimepath=~...,...,~/.config/nvim/after
- однако я не вижу загруженного файла:scriptnames
. Как я могу загрузить файл?
- Измените расположение файла на
~/.config/nvim/after
вместо~/.config/nvim/after/syntax
- Это тоже не работает.
- Загрузите файл вручную.
- Это на самом деле делает работу на удивление. Я могу вручную изменить синтаксис файла, используя,
:set syntax=fstrings
однако, все исходное выделение синтаксиса, предоставляемое плагином, исчезает, и используется только выделение, предоставленное (см. Оператор печати на изображении ниже)fstrings.vim
. Это заставляет меня думать, что путь настроен правильно, однако nvim не хочет загружать его во время запуска и / или игнорирует его из-за используемого плагина.
Я знаю, что /after/
папка используется для применения настроек после предыдущих настроек, а не для перезаписи. Я уже пробовал решение здесь и здесь, но мне не удалось заставить его работать. Любая помощь в том, как отладить это, будет оценена.
" ~/.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
Ответы
Правила синтаксиса обычно называются в честь 'filetype'набора для буфера, который, в свою очередь, обычно обнаруживается (на основе расширения файла, имени файла или содержимого файла) и обычно устанавливается автоматически.
Если вы хотите расширить подсветку синтаксиса для Python, вам обычно следует называть свой скрипт после типа "python"
файла.
Когда Vim загружает правила синтаксиса для Python, он будет обрабатывать файлы с именем syntax/python.vim
или syntax/python/*.vim
(правила ftplugin также позволяют python_*.vim
, но оказывается, что это не относится к синтаксису).
Поэтому вы должны назвать свой файл ~/.config/nvim/after/syntax/python.vim
(или ~/.config/nvim/after/syntax/python/fstrings.vim
), чтобы он загружался для файлов Python и после загрузки связанных правил времени выполнения для Python.
Другой вариант - установить 'syntax'параметр для включения нескольких типов, разделенных точкой. Например, :setlocal syntax=python.fstrings
сначала загрузится, syntax/python.vim
а потом syntax/fstrings.vim
. Это было бы более полезно, если бы у вас был фрагмент синтаксиса, который несколько универсален и может иметь смысл для нескольких отдельных языков (например, некоторая подсветка синтаксиса в формате документации внутри комментариев?) Это кажется не очень применимым в этом случае , где f-строки по сути являются синтаксисом Python. Сохранение 'syntax'
настройки отдельно от 'filetype'
одной также может быть сложной задачей, ее нужно установить в правильном месте (не слишком рано или слишком поздно), чтобы избежать сбоя при настройке по умолчанию.
При устранении такой проблемы, когда ваш скрипт не загружается, вы можете использовать эту :scriptnamesкоманду, чтобы проверить, действительно ли ваш *.vim
скрипт был загружен Vim в какой-то момент. Повторите это до и после открытия файла определенного типа, после которого вы хотите убедиться, что он был инициирован обнаружением этого типа файла.