Syntaxe des couleurs mixtes dans vim

12

J'écris souvent des documents dans knitr en utilisant vim, ce qui signifie que j'ai du code de démarque mélangé avec du code R. Je voudrais avoir la coloration de la syntaxe R sur les morceaux R, mais la démarque ou pas de coloration sur tous les autres fragments. Est-ce faisable? Comment?

janvier
la source
3
Je pense que vous pouvez, essayez de regarder vim.wikia.com/wiki/…
nobe4
5
En fonction de votre plugin de démarquage, vous pouvez ou non avoir déjà pris en charge la coloration syntaxique des "blocs de code" inclus. Dans le premier cas, vous devrez (juste) modifier la syntaxe du plugin pour reconnaître vos "morceaux R" comme des blocs de code valides. Dans le deuxième cas, vous pouvez peut-être vous inspirer du vimrc de Junegunn, en particulier des fonctions s:syntax_includeet s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser
5
S'agit-il d'un fichier de démarque qui se trouve avoir du code R à l'intérieur des blocs de code? Si c'est le cas, vous voudrez peut-être ajouter R à votre g:markdown_fenced_languagespar vimrcexemple let g: markdown_fenced_languages ​​= ['r'] `. Je suppose que vous utilisez la syntaxe de démarque par défaut fournie par Tim Pope. Plus d'informations sur les langues clôturées
Peter Rincker
1
Les fichiers de syntaxe Vim ne sont, comme la plupart des choses dans Vim, qu'une séquence de commandes Ex placées dans un fichier. Vous pouvez en inclure un, deux, trois ou autant que vous le souhaitez. La création d'un fichier de syntaxe qui met en évidence certains blocs comme langue A et d'autres blocs comme langue B n'est pas si difficile (en fait, je viens de le faire dans une autre réponse ). Cependant, je ne sais pas exactement à quoi ressemblent les documents "knitr"? Est-ce juste Markdown? Ou une syntaxe différente?
Martin Tournoij

Réponses:

2

Comme le note Peter Rincker , le formatage de démarque standard de Vim inclut déjà la prise en charge de la mise en évidence du rcode dans un "bloc de code clôturé", et pour l'activer, il vous suffit de définir une variable globale avec du code dans votre vimrc:

let g:markdown_fenced_languages = ['r']

Cependant, après cela, vous constaterez que vos blocs de code knitr ne sont toujours pas mis en évidence.

En effet, knitr utilise le formatage de chaînes d'informations de Pandoc afin de différencier le code R qui doit être exécuté à partir d'un bloc de code normal , et la mise en évidence Markdown régulière de Vim ne prend pas en charge ce 1 .

La façon la plus simple de résoudre ce problème consiste à ajouter manuellement un élément de syntaxe supplémentaire pour correspondre à ce type de bloc de code en ajoutant la ligne suivante à ~/.vim/after/syntax/markdown.vim

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

Vous pouvez également envisager d'installer un plug-in Vim pour la mise en évidence de Pandoc, qui prendrait vraisemblablement en charge cette fonctionnalité prête à l'emploi.

1: Cela ne peut pas vraiment être considéré comme un problème dans le fichier de syntaxe de démarque de Vim. La syntaxe Markdown d'origine n'inclut pas du tout les blocs de code clôturés, et la spécification CommonMark ne définit pas comment les chaînes d'informations doivent être formatées.

Riches
la source