Mieszana składnia kolorów w vimie

12

Często piszę dokumenty w knitr przy użyciu vima, co oznacza, że ​​mam kod zniżkowy zmieszany z kodem R. Chciałbym mieć kolorowanie składni R na fragmentach R, ale zaznaczanie lub brak kolorowania na wszystkich innych fragmentach. Czy to jest wykonalne? W jaki sposób?

styczeń
źródło
3
Myślę, że możesz, spróbuj spojrzeć na vim.wikia.com/wiki/…
nobe4
5
W zależności od wtyczki Markdown możesz, ale nie musi, obsługiwać kolorowanie składni dołączonych „bloków kodu”. W pierwszym przypadku będziesz musiał (po prostu) zmienić składnię wtyczki, aby rozpoznać „fragmenty R” jako prawidłowe bloki kodu. W drugim przypadku być może zainspirujesz się vimrc Junegunna, zwłaszcza funkcjami s:syntax_includei s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser
5
Czy jest to plik przeceny, który zawiera kod R wewnątrz bloków kodu? Jeśli tak, możesz dodać do swojej R g:markdown_fenced_languagesw vimrcnp Niech G: markdown_fenced_languages = [ „r”] `. Zakładam, że używasz domyślnej składni Markdown dostarczonej przez Tima Pope'a. Więcej o językach ogrodzonych
Peter Rincker,
1
Pliki składniowe Vima są, podobnie jak większość rzeczy w Vimie, tylko sekwencją poleceń Ex umieszczonych w pliku. Możesz dołączyć jeden, dwa, trzy lub tyle, ile chcesz. Utworzenie pliku składni, który wyróżnia niektóre bloki jako język A i inne bloki jako język B, nie jest takie trudne (w rzeczywistości zrobiłem to w innej odpowiedzi ). Nie jestem jednak do końca pewien, jak wyglądają dokumenty „knitr”? Czy to tylko Markdown? Lub inna składnia?
Martin Tournoij,

Odpowiedzi:

2

Jak zauważa Peter Rincker , standardowe formatowanie przeceny Vima zawiera już obsługę podświetlania rkodu w „ogrodzonym bloku kodu”, a aby go włączyć, wystarczy ustawić zmienną globalną z kodem w vimrc:

let g:markdown_fenced_languages = ['r']

Jednak po wykonaniu tej czynności okaże się, że bloki kodu knitr nadal nie są podświetlone.

Dzieje się tak, ponieważ knitr używa formatowania ciągów informacji przez Pandoc w celu odróżnienia kodu R, który ma być uruchamiany ze zwykłego bloku kodu , a regularne podświetlanie Markdown przez Vima nie obsługuje tego 1 .

Najprostszym sposobem na rozwiązanie tego problemu jest ręczne dodanie dodatkowego elementu składni w celu dopasowania do tego typu bloku kodu poprzez dodanie następującego wiersza do ~/.vim/after/syntax/markdown.vim

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

Możesz również rozważyć zainstalowanie wtyczki Vim do podświetlania Pandoc, która prawdopodobnie obsługiwałaby to po wyjęciu z pudełka.

1: Nie można tego tak naprawdę traktować jako problemu w pliku składni obniżek Vima. Oryginalny składni Markdown nie obejmuje ogrodzony bloki kodu w ogóle, a CommonMark specyfikacja nie definiuje jak struny informacji powinien być sformatowany.

Bogaty
źródło