Mischfarbensyntax in vim

12

Ich schreibe oft Dokumente in knitr mit vim, was bedeutet, dass ich Markdown-Code mit R-Code vermischt habe. Ich hätte gerne R-Syntax-Farben für R-Stücke, aber Markierungen oder keine Farben für alle anderen Fragmente. Ist das machbar? Wie?

Januar
quelle
3
Ich denke, Sie können versuchen, vim.wikia.com/wiki/…
nobe4
5
Abhängig von Ihrem Markdown-Plug-In haben Sie möglicherweise bereits Unterstützung für die Syntaxfärbung der enthaltenen "Codeblöcke". Im ersten Fall müssen Sie (nur) die Syntax des Plugins ändern, um Ihre "R-Chunks" als gültige Codeblöcke zu erkennen. Im zweiten Fall können Sie sich vielleicht von Junegunns vimrc inspirieren lassen, insbesondere von den Funktionen s:syntax_includeund s:file_type_handler: github.com/junegunn/dotfiles/blob/master/vimrc
VanLaser
5
Ist dies eine Markdown-Datei, die zufällig R-Code in Codeblöcken enthält? Wenn ja, mögen Sie vielleicht R Ihren hinzuzufügen g:markdown_fenced_languagesin Ihrem vimrczB lassen g: markdown_fenced_languages = [ ‚r‘] `. Ich gehe davon aus, dass Sie die von Tim Pope bereitgestellte Standard-Markdown-Syntax verwenden . Mehr zu umzäunten Sprachen
Peter Rincker
1
Vim-Syntaxdateien sind, wie die meisten Dinge in Vim, nur eine Folge von Ex-Befehlen, die in eine Datei eingefügt werden. Sie können eins, zwei, drei oder so viele einschließen, wie Sie möchten. Das Erstellen einer Syntaxdatei, die einige Blöcke als Sprache A und andere Blöcke als Sprache B hervorhebt, ist nicht so schwierig (tatsächlich habe ich dies in einer anderen Antwort getan ). Allerdings bin ich mir nicht ganz sicher, wie die "knitr" -Dokumente aussehen? Ist das nur Markdown? Oder eine andere Syntax?
Martin Tournoij

Antworten:

2

Wie Peter Rincker festhält , unterstützt die Standardformatierung von Vim das Hervorheben von rCode in einem "umzäunten Codeblock". Um dies zu aktivieren, müssen Sie lediglich eine globale Variable mit Code in Ihrem vimrc:

let g:markdown_fenced_languages = ['r']

Danach werden Sie jedoch feststellen, dass Ihre Knitr-Codeblöcke immer noch nicht hervorgehoben sind.

Dies liegt daran, dass Knitr die Formatierung von Info-Strings von Pandoc verwendet, um R-Code, der aus einem regulären Codeblock ausgeführt werden soll , zu unterscheiden , und Vims reguläre Markdown-Hervorhebung unterstützt diese 1 nicht .

Die einfachste Möglichkeit, dies zu beheben, besteht darin, manuell ein zusätzliches Syntaxelement hinzuzufügen, das diesem Codeblocktyp entspricht, indem die folgende Zeile hinzugefügt wird ~/.vim/after/syntax/markdown.vim

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

Sie können auch ein Vim-Plugin für Pandoc-Hervorhebungen installieren, das dies vermutlich sofort unterstützt.

1: Dies kann in Vims Abschriften-Syntaxdatei nicht wirklich als Problem angesehen werden. Die ursprüngliche Markdown-Syntax enthält überhaupt keine umzäunten Codeblöcke, und die CommonMark-Spezifikation definiert nicht, wie Info-Strings formatiert werden sollen.

Reich
quelle