Nvim'e Ek Sözdizimi Vurgusu Ekleme; .vim dosyasını yüklemek için .config / nvim / after / sözdizimi alınamıyor
Sözdizimi vurgulaması için kullandığım bir eklentiye ek sözdizimi vurgulaması eklemeye çalışıyorum . Ben ek sözdizimi dosyasını ekleyerek denedim fstrings.vim
için ~/.config/nvim/after/syntax
klasörün ama benim nvim toplayıp değildir.
Denediğim şeyler:
- Kontrol edin
~/.config/nvim/after
ve / veya~/.config/nvim/after/syntax
benim çalışma zamanı yoluna eklenir.
- Yalnızca
~/.config/nvim/after
yoluma eklendi -:set rtp
>> ile işaretlendiruntimepath=~...,...,~/.config/nvim/after
- ancak yüklenen dosyayı göremiyorum:scriptnames
. Dosyanın yüklenmesini nasıl sağlayabilirim?
- Dosyanın değiştirme konumu için
~/.config/nvim/after
yerine~/.config/nvim/after/syntax
- Bu da çalışmıyor.
- Dosyayı manuel olarak yükleyin.
- Bu aslında yapar şaşırtıcı işi. Dosyanın sözdizimini manuel olarak değiştirebilirim,
:set syntax=fstrings
ancak eklenti tarafından sağlanan tüm orijinal sözdizimi vurgulamaları kaybolur ve yalnızca tarafından sağlanan vurgulama (aşağıdaki görüntüdeki yazdırma ifadesine bakın)fstrings.vim
kullanılır. Bu, yolun doğru ayarlandığına inanmama neden oluyor, ancak nvim başlangıç sırasında yüklemek istemiyor ve / veya kullanılan eklenti nedeniyle onu yok sayıyor.

/after/
Klasörün üzerine yazmak yerine önceki ayarlardan sonra ayarları uygulamak için kullanıldığını biliyorum . Çözümü zaten burada ve burada denedim ama çalışmasını sağlayamadım. Bunun nasıl hata ayıklanacağına dair herhangi bir yardım memnuniyetle karşılanacaktır.
" ~/.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
Yanıtlar
Sözdizimi kuralları genellikle 'filetype'arabellek için olan kümeden sonra adlandırılır ve bu da tipik olarak algılanır (dosya uzantısı, dosya adı veya dosya içeriğine göre) ve genellikle otomatik olarak ayarlanır.
İsterseniz uzatmak Python için dizim, o zaman genellikle sonra komut ismi lazım "python"
filetype.
Vim , Python için sözdizimi kurallarını yüklediğinde , syntax/python.vim
veya adlı dosyalar için yapacaktır syntax/python/*.vim
(ftplugin kuralları da izin verir python_*.vim
, ancak sözdizimi için durum böyle değildir.)
Bu nedenle , Python dosyaları için yüklenmesini sağlamak için ve Python için paketlenmiş çalışma zamanı kuralları yüklendikten sonra dosyanızı ~/.config/nvim/after/syntax/python.vim
(veya ~/.config/nvim/after/syntax/python/fstrings.vim
) adlandırmalısınız.
Diğer bir seçenek, 'syntax'seçeneği nokta ile ayrılmış birden çok türü içerecek şekilde ayarlamaktır . Örneğin, :setlocal syntax=python.fstrings
önce yüklenecek syntax/python.vim
ve sonra syntax/fstrings.vim
. Bu, biraz genel olan ve birden çok ayrı dil için anlamlı olabilecek bir sözdizimi parçasına sahip olsaydınız daha kullanışlı olurdu (örneğin, yorumların içindeki bir dokümantasyon biçimini vurgulayan bazı sözdizimi?) Bu durumda pek uygulanabilir görünmüyor , burada f dizeleri aslında bir Python sözdizimi. Bir 'syntax'
ayarı 'filetype'
birinden ayrı tutmak da yanıltıcı olabilir, varsayılan ayarda bozulmayı önlemek için doğru konuma (çok erken veya çok geç değil) ayarlanması gerekir.
Yüklenmemiş bir betiğinizin böyle bir sorununu giderirken :scriptnames, *.vim
betiğinizin bir noktada gerçekten Vim tarafından yüklenip yüklenmediğini kontrol etmek için komutu kullanabilirsiniz . Bu dosya türü algılaması tarafından tetiklendiğini doğrulamak için, peşinde olduğunuz belirli dosya türündeki bir dosyayı açmadan önce ve sonra tekrarlayın.