summaryrefslogtreecommitdiffstats
path: root/syntax/rmd.vim
diff options
context:
space:
mode:
Diffstat (limited to 'syntax/rmd.vim')
-rw-r--r--syntax/rmd.vim127
1 files changed, 127 insertions, 0 deletions
diff --git a/syntax/rmd.vim b/syntax/rmd.vim
new file mode 100644
index 00000000..6077e31f
--- /dev/null
+++ b/syntax/rmd.vim
@@ -0,0 +1,127 @@
+if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'vim') == -1
+
+" markdown Text with R statements
+" Language: markdown with R code chunks
+" Homepage: https://github.com/jalvesaq/R-Vim-runtime
+" Last Change: Sat Jan 28, 2017 10:06PM
+"
+" CONFIGURATION:
+" To highlight chunk headers as R code, put in your vimrc (e.g. .config/nvim/init.vim):
+" let rmd_syn_hl_chunk = 1
+"
+" For highlighting pandoc extensions to markdown like citations and TeX and
+" many other advanced features like folding of markdown sections, it is
+" recommended to install the vim-pandoc filetype plugin as well as the
+" vim-pandoc-syntax filetype plugin from https://github.com/vim-pandoc.
+"
+" TODO:
+" - Provide highlighting for rmarkdown parameters in yaml header
+
+if exists("b:current_syntax")
+ finish
+endif
+
+" load all of pandoc info, e.g. from
+" https://github.com/vim-pandoc/vim-pandoc-syntax
+runtime syntax/pandoc.vim
+if exists("b:current_syntax")
+ let rmdIsPandoc = 1
+ unlet b:current_syntax
+else
+ let rmdIsPandoc = 0
+ runtime syntax/markdown.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+
+ " load all of the yaml syntax highlighting rules into @yaml
+ syntax include @yaml syntax/yaml.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+
+ " highlight yaml block commonly used for front matter
+ syntax region rmdYamlBlock matchgroup=rmdYamlBlockDelim start="^---" matchgroup=rmdYamlBlockDelim end="^---" contains=@yaml keepend fold
+endif
+
+if !exists("g:rmd_syn_langs")
+ let g:rmd_syn_langs = ["r"]
+else
+ let s:hasr = 0
+ for s:lng in g:rmd_syn_langs
+ if s:lng == "r"
+ let s:hasr = 1
+ endif
+ endfor
+ if s:hasr == 0
+ let g:rmd_syn_langs += ["r"]
+ endif
+endif
+
+for s:lng in g:rmd_syn_langs
+ exe 'syntax include @' . toupper(s:lng) . ' syntax/'. s:lng . '.vim'
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ exe 'syntax region rmd' . toupper(s:lng) . 'Chunk start="^[ \t]*``` *{\(' . s:lng . '\|r.*engine\s*=\s*["' . "']" . s:lng . "['" . '"]\).*}$" end="^[ \t]*```$" contains=@' . toupper(s:lng) . ',rmd' . toupper(s:lng) . 'ChunkDelim keepend fold'
+
+ if exists("g:rmd_syn_hl_chunk") && s:lng == "r"
+ " highlight R code inside chunk header
+ syntax match rmdRChunkDelim "^[ \t]*```{r" contained
+ syntax match rmdRChunkDelim "}$" contained
+ else
+ exe 'syntax match rmd' . toupper(s:lng) . 'ChunkDelim "^[ \t]*```{\(' . s:lng . '\|r.*engine\s*=\s*["' . "']" . s:lng . "['" . '"]\).*}$" contained'
+ endif
+ exe 'syntax match rmd' . toupper(s:lng) . 'ChunkDelim "^[ \t]*```$" contained'
+endfor
+
+
+" also match and syntax highlight in-line R code
+syntax region rmdrInline matchgroup=rmdInlineDelim start="`r " end="`" contains=@R containedin=pandocLaTeXRegion,yamlFlowString keepend
+" I was not able to highlight rmdrInline inside a pandocLaTeXCommand, although
+" highlighting works within pandocLaTeXRegion and yamlFlowString.
+syntax cluster texMathZoneGroup add=rmdrInline
+
+" match slidify special marker
+syntax match rmdSlidifySpecial "\*\*\*"
+
+
+if rmdIsPandoc == 0
+ syn match rmdBlockQuote /^\s*>.*\n\(.*\n\@<!\n\)*/ skipnl
+ " LaTeX
+ syntax include @LaTeX syntax/tex.vim
+ if exists("b:current_syntax")
+ unlet b:current_syntax
+ endif
+ " Inline
+ syntax match rmdLaTeXInlDelim "\$"
+ syntax match rmdLaTeXInlDelim "\\\$"
+ syn region texMathZoneX matchgroup=Delimiter start="\$" skip="\\\\\|\\\$" matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
+ " Region
+ syntax match rmdLaTeXRegDelim "\$\$" contained
+ syntax match rmdLaTeXRegDelim "\$\$latex$" contained
+ syntax match rmdLaTeXSt "\\[a-zA-Z]\+"
+ syntax region rmdLaTeXRegion start="^\$\$" skip="\\\$" end="\$\$$" contains=@LaTeX,rmdLaTeXRegDelim keepend
+ syntax region rmdLaTeXRegion2 start="^\\\[" end="\\\]" contains=@LaTeX,rmdLaTeXRegDelim keepend
+ hi def link rmdBlockQuote Comment
+ hi def link rmdLaTeXSt Statement
+ hi def link rmdLaTeXInlDelim Special
+ hi def link rmdLaTeXRegDelim Special
+endif
+
+for s:lng in g:rmd_syn_langs
+ exe 'syn sync match rmd' . toupper(s:lng) . 'SyncChunk grouphere rmd' . toupper(s:lng) . 'Chunk /^[ \t]*``` *{\(' . s:lng . '\|r.*engine\s*=\s*["' . "']" . s:lng . "['" . '"]\)/'
+endfor
+
+hi def link rmdYamlBlockDelim Delim
+for s:lng in g:rmd_syn_langs
+ exe 'hi def link rmd' . toupper(s:lng) . 'ChunkDelim Special'
+endfor
+hi def link rmdInlineDelim Special
+hi def link rmdSlidifySpecial Special
+
+let b:current_syntax = "rmd"
+
+" vim: ts=8 sw=2
+
+endif