Aggiunta di un'evidenziazione della sintassi aggiuntiva a nvim; impossibile ottenere .config / nvim / after / syntax per caricare il file .vim
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.vim
alla ~/.config/nvim/after/syntax
cartella ma il mio nvim non lo sta raccogliendo.
Cose che ho provato:
- Controlla se
~/.config/nvim/after
e / o~/.config/nvim/after/syntax
è aggiunto al mio percorso di runtime.
- Solo
~/.config/nvim/after
viene 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?
- Cambia la posizione del file in
~/.config/nvim/after
invece di~/.config/nvim/after/syntax
- Anche questo non funziona.
- 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) dafstrings.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
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.vim
o 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.fstrings
verrà prima caricato syntax/python.vim
e 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 *.vim
script è 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.