Sintaks warna campuran dalam vim

12

Saya sering menulis dokumen dalam knitr menggunakan vim, yang berarti saya memiliki kode penurunan harga yang dicampur dengan kode R. Saya ingin memiliki pewarnaan sintaks R pada potongan R, tetapi penurunan harga atau tidak ada pewarnaan pada semua fragmen lainnya. Apakah ini bisa dilakukan? Bagaimana?

Januari
sumber
3
Saya pikir Anda bisa, coba lihat vim.wikia.com/wiki/…
nobe4
5
Bergantung pada plugin penurunan harga Anda, Anda mungkin atau mungkin belum mendukung pewarnaan sintaks dari "blok kode" yang disertakan. Dalam kasus pertama, Anda harus (hanya) harus mengubah sintaks plugin untuk mengenali "R chunks" Anda sebagai blok kode yang valid. Dalam kasus ke-2, mungkin Anda dapat menginspirasi diri Anda dari vimrc Junegunn, terutama fungsi s:syntax_includedan s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser
5
Apakah ini file penurunan harga yang kebetulan memiliki kode R di dalam blok kode? Jika demikian, Anda mungkin ingin menambahkan R ke g:markdown_fenced_languagesdalam vimrcmis Anda misalkan g: markdown_fenced_languages ​​= ['r'] `. Saya berasumsi Anda menggunakan sintaks penurunan harga bawaan yang disediakan oleh Tim Pope. Lebih lanjut tentang bahasa berpagar
Peter Rincker
1
File sintaks Vim adalah, seperti kebanyakan hal di Vim, hanya urutan perintah Ex yang dimasukkan ke dalam file. Anda dapat memasukkan satu, dua, tiga, atau sebanyak yang Anda inginkan. Membuat file sintaks yang menyoroti beberapa blok sebagai bahasa A dan blok lain sebagai bahasa B tidak terlalu sulit (sebenarnya, saya hanya melakukan ini di jawaban lain ). Namun, saya tidak sepenuhnya yakin seperti apa dokumen "rajutan" itu? Apakah ini hanya penurunan harga? Atau sintaks yang berbeda?
Martin Tournoij

Jawaban:

2

Seperti yang dicatat Peter Rincker , pemformatan penurunan harga standar Vim sudah termasuk dukungan untuk menyoroti rkode dalam "blok kode berpagar", dan untuk mengaktifkannya, Anda hanya perlu mengatur variabel global dengan kode di vimrc:

let g:markdown_fenced_languages = ['r']

Namun, setelah melakukannya, Anda akan menemukan bahwa blok kode knitr Anda masih belum disorot.

Ini karena knitr menggunakan format informasi string Pandoc untuk membedakan kode R yang akan dijalankan dari blok kode biasa , dan penyorotan Markdown reguler Vim tidak mendukung 1 ini .

Cara termudah untuk memperbaikinya adalah dengan menambahkan item sintaksis secara manual untuk mencocokkan jenis blok kode ini dengan menambahkan baris berikut ke ~/.vim/after/syntax/markdown.vim

syntax region markdownHighlightr matchgroup=markdownCodeDelimiter start=/^\s*```{r}.*$/ end=/^\s*```\ze\s*$/ keepend contains=@markdownHighlightr

Anda juga dapat mempertimbangkan menginstal plugin Vim untuk menyoroti Pandoc, yang mungkin akan mendukung ini di luar kotak.

1: Ini tidak bisa dianggap sebagai masalah dalam file sintaks markdown Vim. The sintaks penurunan harga asli tidak termasuk dipagari blok kode sama sekali, dan CommonMark spesifikasi tidak menentukan bagaimana Info string harus diformat.

Kaya
sumber