vim中的混合颜色语法


12

我经常使用vim 在knitr中编写文档,这意味着我将markdown代码与R代码混合在一起。我想在R块上使用R语法着色,但在所有其他片段上都使用markdown或不着色。这可行吗?怎么样?


3
我想你可以尝试寻找在vim.wikia.com/wiki/...
nobe4

5
根据您的markdown插件,您可能已经支持或可能不支持所包含的“代码块”的语法着色。在第一种情况下,您将(仅)必须更改插件的语法以将“ R块”识别为有效的代码块。在第二种情况下,也许您可​​以从Junegunn的vimrc中获得启发,尤其是函数s:syntax_includes:file_type_handlergithub.com/junegunn/dotfiles/blob/master/vimrc
VanLaser

5
这是一个Markdown文件,恰巧在代码块中包含R代码吗?如果是这样,您可能想g:markdown_fenced_languages在您的vimrc示例中添加R到g:markdown_fenced_languages = ['r']`。我假设您使用的是Tim Pope提供的默认markdown语法有关受限制语言的更多信息
Peter Rincker

1
像Vim中的大多数东西一样,Vim语法文件只是文件中放入的一系列Ex命令。您可以根据需要添加一个,两个,三个或任意多个。创建一个语法文件来突出显示某些块(如语言A)和突出显示某些块(如语言B)并不难(实际上,我只是在另一个答案中做到了这一点)。但是,我不完全确定“编织”文档的外观如何?这就是Markdown吗?还是其他语法?
马丁·图尔诺伊

Answers:


2

正如Peter Rincker所指出的那样,Vim的标准markdown格式已经包括了对r“防御代码块”中突出显示代码的支持,并且要启用它,您只需要在代码中设置一个带有代码的全局变量即可vimrc

let g:markdown_fenced_languages = ['r']

但是,这样做之后,您会发现编织代码块仍未突出显示。

这是因为knitr使用Pandoc的信息字符串格式来区分将要运行的R代码与常规代码块,而Vim的常规Markdown高亮不支持1

解决此问题的最简单方法是,通过将以下行添加到 ~/.vim/after/syntax/markdown.vim

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

您也可以考虑安装Vim插件以突出显示Pandoc,这大概可以立即使用。

1:在Vim的markdown语法文件中,这并不是真正的问题。在原来降价语法不包括在所有的围栏代码块,和CommonMark规范没有定义信息串应该如何格式化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.