Sintassi del colore misto in vim


12

Sto spesso scrivendo documenti in Knitr usando VIM , il che significa che ho un codice di markdown mescolato con il codice R. Vorrei avere la colorazione della sintassi R su blocchi R, ma markdown o nessuna colorazione su tutti gli altri frammenti. È fattibile? Come?


3
Penso che puoi, prova a guardare vim.wikia.com/wiki/…
nobe4

5
A seconda del plug-in markdown, potresti avere o meno il supporto per la colorazione della sintassi dei "blocchi di codice" inclusi. Nel primo caso, dovrai (solo) modificare la sintassi del plugin per riconoscere i tuoi "blocchi R" come blocchi di codice validi. Nel secondo caso, forse puoi ispirarti dal vimrc di Junegunn, in particolare le funzioni s:syntax_includee s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser

5
Si tratta di un file markdown con codice R all'interno dei blocchi di codice? In tal caso, potresti voler aggiungere R al tuo g:markdown_fenced_languagesad vimrces. Let g: markdown_fenced_languages ​​= ['r'] `. Suppongo che tu stia utilizzando la sintassi di markdown predefinita fornita da Tim Pope. Altro su lingue recintate
Peter Rincker

1
I file di sintassi di Vim sono, come la maggior parte delle cose in Vim, solo una sequenza di comandi Ex inseriti in un file. Puoi includerne uno, due, tre o quanti ne desideri. Creare un file di sintassi che evidenzi alcuni blocchi come lingua A e altri blocchi come lingua B non è così difficile (in realtà, l' ho appena fatto in un'altra risposta ). Tuttavia, non sono del tutto sicuro di come siano i documenti "knitr"? È solo Markdown? O una sintassi diversa?
Martin Tournoij,

Risposte:


2

Come osserva Peter Rincker , la formattazione markdown standard di Vim include già il supporto per l'evidenziazione del rcodice all'interno di un "blocco di codice recintato" e per abilitarlo, devi solo impostare una variabile globale con il codice nel tuo vimrc:

let g:markdown_fenced_languages = ['r']

Tuttavia, dopo averlo fatto, scoprirai che i tuoi blocchi di codice knitr non sono ancora evidenziati.

Questo perché knitr utilizza la formattazione Pandoc delle stringhe di informazioni per differenziare il codice R che deve essere eseguito da un normale blocco di codice e l'evidenziazione Markdown regolare di Vim non supporta questo 1 .

Il modo più semplice per risolvere questo problema è aggiungere manualmente un elemento di sintassi aggiuntivo per abbinare questo tipo di blocco di codice aggiungendo la seguente riga a ~/.vim/after/syntax/markdown.vim

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

Puoi anche prendere in considerazione l'installazione di un plug-in Vim per l'evidenziazione di Pandoc, che presumibilmente supporterà questo immediatamente.

1: Questo non può davvero essere considerato un problema nel file di sintassi di markdown di Vim. La sintassi Markdown originale non include affatto blocchi di codice recintati e le specifiche CommonMark non definiscono come formattare le stringhe di informazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.