Menambahkan Sorotan Sintaks Tambahan ke nvim; tidak bisa mendapatkan .config / nvim / after / syntax untuk memuat file .vim

Jan 12 2021

Saya mencoba menambahkan penyorotan sintaks tambahan ke plugin yang saya gunakan untuk penyorotan sintaks. Saya sudah mencoba menambahkan file sintaks tambahan fstrings.vimke ~/.config/nvim/after/syntaxfolder tetapi nvim saya tidak mengambilnya.

Hal-hal yang saya coba:

  1. Periksa apakah ~/.config/nvim/afterdan / atau ~/.config/nvim/after/syntaxditambahkan ke jalur runtime saya.
  • Hanya ~/.config/nvim/afterditambahkan ke jalur saya - dicentang dengan :set rtp>> runtimepath=~...,...,~/.config/nvim/after- namun saya tidak melihat file tersebut dimuat :scriptnames. Bagaimana saya bisa memuat file?
  1. Ubah lokasi file yang ~/.config/nvim/afterbukan~/.config/nvim/after/syntax
  • Ini juga tidak berhasil.
  1. 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 yang fstrings.vimdigunakan. 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

1 filbranden Jan 13 2021 at 07:17

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.vimatau 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.fstringspertama akan memuat syntax/python.vimlalu 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 *.vimskrip 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.