Nvim'e Ek Sözdizimi Vurgusu Ekleme; .vim dosyasını yüklemek için .config / nvim / after / sözdizimi alınamıyor

Jan 12 2021

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.vimiçin ~/.config/nvim/after/syntaxklasörün ama benim nvim toplayıp değildir.

Denediğim şeyler:

  1. Kontrol edin ~/.config/nvim/afterve / veya ~/.config/nvim/after/syntaxbenim çalışma zamanı yoluna eklenir.
  • Yalnızca ~/.config/nvim/afteryoluma eklendi - :set rtp>> ile işaretlendi runtimepath=~...,...,~/.config/nvim/after- ancak yüklenen dosyayı göremiyorum :scriptnames. Dosyanın yüklenmesini nasıl sağlayabilirim?
  1. Dosyanın değiştirme konumu için ~/.config/nvim/afteryerine~/.config/nvim/after/syntax
  • Bu da çalışmıyor.
  1. 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=fstringsancak 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.vimkullanı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

1 filbranden Jan 13 2021 at 07:17

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.vimveya 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.vimve 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, *.vimbetiğ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.