Aggiunta di un'evidenziazione della sintassi aggiuntiva a nvim; impossibile ottenere .config / nvim / after / syntax per caricare il file .vim

Jan 12 2021

Sto cercando di aggiungere un'ulteriore evidenziazione della sintassi a un plug-in che sto utilizzando per l'evidenziazione della sintassi. Ho provato ad aggiungere il file di sintassi aggiuntivo fstrings.vimalla ~/.config/nvim/after/syntaxcartella ma il mio nvim non lo sta raccogliendo.

Cose che ho provato:

  1. Controlla se ~/.config/nvim/aftere / o ~/.config/nvim/after/syntaxè aggiunto al mio percorso di runtime.
  • Solo ~/.config/nvim/afterviene aggiunto al mio percorso - controllato con :set rtp>> runtimepath=~...,...,~/.config/nvim/after- tuttavia non vedo il file caricato in :scriptnames. Come posso caricare il file?
  1. Cambia la posizione del file in ~/.config/nvim/afterinvece di~/.config/nvim/after/syntax
  • Anche questo non funziona.
  1. Carica manualmente il file.
  • Questo in realtà non lavoro sorprendentemente. Posso modificare manualmente la sintassi del file utilizzando :set syntax=fstrings, tuttavia, tutta l'evidenziazione della sintassi originale fornita dal plug-in scompare e viene utilizzata solo l'evidenziazione fornita (vedere la dichiarazione di stampa nell'immagine sotto) da fstrings.vim. Questo mi porta a credere che il percorso sia impostato correttamente, tuttavia nvim non vuole caricarlo durante l'avvio e / o lo ignora a causa del plug-in utilizzato.

So che la /after/cartella viene utilizzata per applicare le impostazioni dopo le impostazioni precedenti, piuttosto che per sovrascriverle. Ho già provato la soluzione qui e qui ma non sono riuscito a farlo funzionare. Qualsiasi aiuto su come eseguire il debug di questo sarebbe apprezzato.

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

Risposte

1 filbranden Jan 13 2021 at 07:17

Le regole di sintassi vengono in genere denominate in base al 'filetype'set per il buffer, che a sua volta viene solitamente rilevato (in base all'estensione del file, al nome del file o al contenuto del file) e solitamente impostato automaticamente.

Se si desidera estendere l' evidenziazione della sintassi per Python, in genere è necessario denominare lo script dopo il tipo di "python"file.

Quando Vim carica le regole di sintassi per Python, lo farà per i file denominati syntax/python.vimo syntax/python/*.vim(anche le regole ftplugin lo consentono python_*.vim, ma risulta che non è il caso della sintassi).

Quindi dovresti nominare il tuo file ~/.config/nvim/after/syntax/python.vim(o ~/.config/nvim/after/syntax/python/fstrings.vim) in modo da averlo caricato per i file Python e dopo che le regole di runtime in bundle per Python sono state caricate.


Un'altra opzione è impostare l' 'syntax'opzione per includere più tipi, separati da un punto. Ad esempio, :setlocal syntax=python.fstringsverrà prima caricato syntax/python.vime poi syntax/fstrings.vim. Ciò sarebbe più utile se avessi un pezzo di sintassi che è in qualche modo generico e può avere senso per più lingue separate (ad esempio, l'evidenziazione della sintassi in un formato di documentazione all'interno dei commenti?) Non sembra essere molto applicabile in questo caso , dove le stringhe f sono essenzialmente una sintassi Python. Mantenere 'syntax'un'impostazione separata da 'filetype'quella può anche essere complicato, deve essere impostato nella posizione giusta (non troppo presto o troppo tardi) per evitare di essere schiacciato dall'impostazione predefinita.


Durante la risoluzione di un problema del genere relativo al mancato caricamento di uno script, è possibile utilizzare il :scriptnamescomando per verificare se lo *.vimscript è stato effettivamente caricato da Vim a un certo punto. Ripeti l'operazione prima e dopo l'apertura di un file del tipo di file specifico che stai cercando per confermare che è stato attivato dal rilevamento del tipo di file.