Adicionando realce de sintaxe adicional ao nvim; não pode obter .config / nvim / after / syntax para carregar o arquivo .vim
Estou tentando adicionar realce de sintaxe adicional a um plugin que estou usando para realce de sintaxe. Eu tentei adicionar o arquivo de sintaxe adicional fstrings.vim
à ~/.config/nvim/after/syntax
pasta, mas meu nvim não está pegando.
Coisas que eu tentei:
- Verifique se
~/.config/nvim/after
e / ou~/.config/nvim/after/syntax
é adicionado ao meu caminho de tempo de execução.
- Só
~/.config/nvim/after
é adicionado ao meu caminho - verificado com:set rtp
>>runtimepath=~...,...,~/.config/nvim/after
- no entanto, não vejo o arquivo carregado:scriptnames
. Como faço para carregar o arquivo?
- Altere a localização do arquivo para em
~/.config/nvim/after
vez de~/.config/nvim/after/syntax
- Isso também não funciona.
- Carregue o arquivo manualmente.
- Isso realmente faz o trabalho surpreendentemente. Posso alterar manualmente a sintaxe do arquivo usando
:set syntax=fstrings
, no entanto, todo o realce de sintaxe original fornecido pelo plugin desaparece, e apenas o realce fornecido (veja a instrução de impressão na imagem abaixo) pelofstrings.vim
é usado. Isso me leva a acreditar que o caminho está configurado corretamente, porém o nvim não deseja carregá-lo durante a inicialização e / ou ignora por causa do plugin que está sendo usado.
Eu sei que a /after/
pasta é usada para aplicar configurações após as configurações anteriores, em vez de substituir. Já tentei a solução aqui e aqui, mas não consegui fazer funcionar. Qualquer ajuda sobre como depurar isso seria apreciada.
" ~/.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
Respostas
As regras de sintaxe são geralmente nomeadas após o 'filetype'conjunto para o buffer, que por sua vez é normalmente detectado (com base na extensão do arquivo, nome do arquivo ou conteúdo do arquivo) e geralmente definido automaticamente.
Se você deseja estender o realce de sintaxe para Python, normalmente deve nomear seu script após o "python"
tipo de arquivo.
Quando o Vim carrega regras de sintaxe para Python, ele carrega para arquivos nomeados syntax/python.vim
ou syntax/python/*.vim
(as regras ftplugin também permitem python_*.vim
, mas acontece que não é o caso da sintaxe).
Portanto, você deve nomear seu arquivo ~/.config/nvim/after/syntax/python.vim
(ou ~/.config/nvim/after/syntax/python/fstrings.vim
) para que ele seja carregado para arquivos Python e depois que as regras de tempo de execução agrupadas para Python forem carregadas.
Outra opção é definir a 'syntax'opção de incluir vários tipos, separados por um ponto. Por exemplo, :setlocal syntax=python.fstrings
carregará primeiro syntax/python.vim
e depois syntax/fstrings.vim
. Isso seria mais útil se você tivesse uma sintaxe um tanto genérica e pode fazer sentido para várias linguagens separadas (por exemplo, algum destaque de sintaxe para um formato de documentação dentro de comentários?) Não parece ser muito aplicável neste caso , onde f-strings são essencialmente uma sintaxe Python. Manter uma 'syntax'
configuração separada da 'filetype'
outra também pode ser complicado, ela precisa ser definida no local certo (nem muito cedo nem muito tarde) para evitar que a configuração padrão seja prejudicada.
Ao solucionar o problema de um script seu não ser carregado, você pode usar o :scriptnamescomando para verificar se o seu *.vim
script foi realmente carregado pelo Vim em algum ponto. Repita isso antes e depois de abrir um arquivo do tipo de arquivo específico que você está procurando para confirmar se ele foi acionado pela detecção desse tipo de arquivo.