Menambahkan Sorotan Sintaks Tambahan ke nvim; tidak bisa mendapatkan .config / nvim / after / syntax untuk memuat file .vim
Saya mencoba menambahkan penyorotan sintaks tambahan ke plugin yang saya gunakan untuk penyorotan sintaks. Saya sudah mencoba menambahkan file sintaks tambahan fstrings.vim
ke ~/.config/nvim/after/syntax
folder tetapi nvim saya tidak mengambilnya.
Hal-hal yang saya coba:
- Periksa apakah
~/.config/nvim/after
dan / atau~/.config/nvim/after/syntax
ditambahkan ke jalur runtime saya.
- Hanya
~/.config/nvim/after
ditambahkan ke jalur saya - dicentang dengan:set rtp
>>runtimepath=~...,...,~/.config/nvim/after
- namun saya tidak melihat file tersebut dimuat:scriptnames
. Bagaimana saya bisa memuat file?
- Ubah lokasi file yang
~/.config/nvim/after
bukan~/.config/nvim/after/syntax
- Ini juga tidak berhasil.
- Muat file secara manual.
- Ini benar - benar bekerja secara mengejutkan. Saya dapat secara manual mengubah sintaks file menggunakan
:set syntax=fstrings
, namun, semua penyorotan sintaks asli yang disediakan oleh plugin menghilang, dan hanya penyorotan yang disediakan (lihat pernyataan cetak pada gambar di bawah) oleh yangfstrings.vim
digunakan. Hal ini membuat saya percaya bahwa jalur telah disiapkan dengan benar namun nvim tidak ingin memuatnya selama startup dan / atau mengabaikannya karena plugin yang digunakan.
Saya tahu /after/
folder tersebut digunakan untuk menerapkan pengaturan setelah pengaturan sebelumnya, daripada menimpa. Saya sudah mencoba solusinya di sini dan di sini tetapi saya belum dapat membuatnya berhasil. Bantuan apa pun tentang cara men-debug ini akan sangat dihargai.
" ~/.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
Jawaban
Aturan sintaks biasanya dinamai setelah 'filetype'set untuk buffer, yang pada gilirannya biasanya terdeteksi (berdasarkan ekstensi file, nama file, atau konten file) dan biasanya disetel secara otomatis.
Jika Anda ingin memperluas penyorotan sintaks untuk Python, Anda biasanya harus memberi nama skrip Anda setelah jenis "python"
file.
Ketika Vim memuat aturan sintaks untuk Python, itu akan untuk file bernama syntax/python.vim
atau syntax/python/*.vim
(aturan ftplugin juga mengizinkannya python_*.vim
, tetapi ternyata bukan itu kasusnya untuk sintaks.)
Jadi Anda harus memberi nama file Anda ~/.config/nvim/after/syntax/python.vim
(atau ~/.config/nvim/after/syntax/python/fstrings.vim
) untuk memuatnya untuk file Python dan setelah aturan runtime yang dibundel untuk Python dimuat.
Opsi lainnya adalah menyetel 'syntax'opsi untuk menyertakan beberapa jenis, dipisahkan oleh titik. Misalnya, :setlocal syntax=python.fstrings
pertama akan memuat syntax/python.vim
lalu syntax/fstrings.vim
. Ini akan lebih berguna jika Anda memiliki sintaks yang agak umum dan dapat dimengerti untuk beberapa bahasa yang terpisah (misalnya, beberapa sintaks yang menyoroti format dokumentasi di dalam komentar?) Tampaknya tidak terlalu dapat diterapkan dalam kasus ini , di mana f-string pada dasarnya adalah sintaksis Python. Mempertahankan 'syntax'
setelan yang terpisah dari yang 'filetype'
satu juga bisa rumit, perlu disetel di lokasi yang tepat (tidak terlalu dini atau terlambat) untuk menghindari tersendat oleh setelan default.
Saat memecahkan masalah seperti skrip Anda tidak dimuat, Anda dapat menggunakan :scriptnamesperintah untuk memeriksa apakah *.vim
skrip Anda benar-benar dimuat oleh Vim di beberapa titik. Ulangi itu sebelum dan setelah membuka file dari jenis file tertentu yang Anda cari untuk mengonfirmasi bahwa itu dipicu oleh deteksi jenis file itu.