123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- " Vim syntax file
- " Language: R (GNU S)
- " Maintainer: Jakson Aquino <jalvesaq@gmail.com>
- " Former Maintainers: Vaidotas Zemlys <zemlys@gmail.com>
- " Tom Payne <tom@tompayne.org>
- " Contributor: Johannes Ranke <jranke@uni-bremen.de>
- " Homepage: https://github.com/jalvesaq/R-Vim-runtime
- " Last Change: Sun Mar 28, 2021 01:47PM
- " Filenames: *.R *.r *.Rhistory *.Rt
- "
- " NOTE: The highlighting of R functions might be defined in
- " runtime files created by a filetype plugin, if installed.
- "
- " CONFIGURATION:
- " Syntax folding can be turned on by
- "
- " let r_syntax_folding = 1
- "
- " ROxygen highlighting can be turned off by
- "
- " let r_syntax_hl_roxygen = 0
- "
- " Some lines of code were borrowed from Zhuojun Chen.
- if exists("b:current_syntax")
- finish
- endif
- if has("patch-7.4.1142")
- syn iskeyword @,48-57,_,.
- else
- setlocal iskeyword=@,48-57,_,.
- endif
- " The variables g:r_hl_roxygen and g:r_syn_minlines were renamed on April 8, 2017.
- if exists("g:r_hl_roxygen")
- let g:r_syntax_hl_roxygen = g:r_hl_roxygen
- endif
- if exists("g:r_syn_minlines")
- let g:r_syntax_minlines = g:r_syn_minlines
- endif
- if exists("g:r_syntax_folding") && g:r_syntax_folding
- setlocal foldmethod=syntax
- endif
- let g:r_syntax_hl_roxygen = get(g:, 'r_syntax_hl_roxygen', 1)
- syn case match
- " Comment
- syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):"
- syn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent
- syn keyword rTodoKeyw BUG FIXME NOTE TODO contained
- syn match rTodoInfo "(\zs.\{-}\ze)" contained
- syn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*"
- " Roxygen
- if g:r_syntax_hl_roxygen
- " A roxygen block can start at the beginning of a file (first version) and
- " after a blank line (second version). It ends when a line appears that does not
- " contain a roxygen comment. In the following comments, any line containing
- " a roxygen comment marker (one or two hash signs # followed by a single
- " quote ' and preceded only by whitespace) is called a roxygen line. A
- " roxygen line containing only a roxygen comment marker, optionally followed
- " by whitespace is called an empty roxygen line.
- " First we match all roxygen blocks as containing only a title. In case an
- " empty roxygen line ending the title or a tag is found, this will be
- " overridden later by the definitions of rOBlock.
- syn match rOTitleBlock "\%^\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
- syn match rOTitleBlock "^\s*\n\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag
- " A title as part of a block is always at the beginning of the block, i.e.
- " either at the start of a file or after a completely empty line.
- syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
- syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag
- syn match rOTitleTag contained "@title"
- " When a roxygen block has a title and additional content, the title
- " consists of one or more roxygen lines (as little as possible are matched),
- " followed either by an empty roxygen line
- syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
- syn region rOBlock start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
- " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @).
- syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
- syn region rOBlock start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold
- " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title
- syn region rOBlockNoTitle start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @rdname" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
- syn region rOBlockNoTitle start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @rdname" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
- syn region rOBlockNoTitle start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
- syn region rOBlockNoTitle start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold
- syn match rOCommentKey "^\s*#\{1,2}'" contained
- syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold
- " R6 classes may contain roxygen lines independent of roxygen blocks
- syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
- syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
- syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained
- " rOTag list originally generated from the lists that were available in
- " https://github.com/klutometis/roxygen/R/rd.R and
- " https://github.com/klutometis/roxygen/R/namespace.R
- " using s/^ \([A-Za-z0-9]*\) = .*/ syn match rOTag contained "@\1"/
- " Plus we need the @include tag
- " rd.R
- syn match rOTag contained "@aliases"
- syn match rOTag contained "@author"
- syn match rOTag contained "@backref"
- syn match rOTag contained "@concept"
- syn match rOTag contained "@describeIn"
- syn match rOTag contained "@description"
- syn match rOTag contained "@details"
- syn match rOTag contained "@docType"
- syn match rOTag contained "@encoding"
- syn match rOTag contained "@evalRd"
- syn match rOTag contained "@example"
- syn match rOTag contained "@examples"
- syn match rOTag contained "@family"
- syn match rOTag contained "@field"
- syn match rOTag contained "@format"
- syn match rOTag contained "@inherit"
- syn match rOTag contained "@inheritParams"
- syn match rOTag contained "@inheritDotParams"
- syn match rOTag contained "@inheritSection"
- syn match rOTag contained "@keywords"
- syn match rOTag contained "@method"
- syn match rOTag contained "@name"
- syn match rOTag contained "@md"
- syn match rOTag contained "@noMd"
- syn match rOTag contained "@noRd"
- syn match rOTag contained "@note"
- syn match rOTag contained "@param"
- syn match rOTag contained "@rdname"
- syn match rOTag contained "@rawRd"
- syn match rOTag contained "@references"
- syn match rOTag contained "@return"
- syn match rOTag contained "@section"
- syn match rOTag contained "@seealso"
- syn match rOTag contained "@slot"
- syn match rOTag contained "@source"
- syn match rOTag contained "@template"
- syn match rOTag contained "@templateVar"
- syn match rOTag contained "@title"
- syn match rOTag contained "@usage"
- " namespace.R
- syn match rOTag contained "@export"
- syn match rOTag contained "@exportClass"
- syn match rOTag contained "@exportMethod"
- syn match rOTag contained "@exportPattern"
- syn match rOTag contained "@import"
- syn match rOTag contained "@importClassesFrom"
- syn match rOTag contained "@importFrom"
- syn match rOTag contained "@importMethodsFrom"
- syn match rOTag contained "@rawNamespace"
- syn match rOTag contained "@S3method"
- syn match rOTag contained "@useDynLib"
- " other
- syn match rOTag contained "@eval"
- syn match rOTag contained "@include"
- syn match rOTag contained "@includeRmd"
- syn match rOTag contained "@order"
- endif
- if &filetype == "rhelp"
- " string enclosed in double quotes
- syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
- " string enclosed in single quotes
- syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
- else
- " string enclosed in double quotes
- syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
- " string enclosed in single quotes
- syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
- endif
- syn match rStrError display contained "\\."
- " New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash
- syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
- " Hexadecimal and Octal digits
- syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)"
- " Unicode characters
- syn match rSpecial display contained "\\u\x\{1,4}"
- syn match rSpecial display contained "\\U\x\{1,8}"
- syn match rSpecial display contained "\\u{\x\{1,4}}"
- syn match rSpecial display contained "\\U{\x\{1,8}}"
- " Raw string
- syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend
- syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend
- syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend
- " Statement
- syn keyword rStatement break next return
- syn keyword rConditional if else
- syn keyword rRepeat for in repeat while
- " Constant (not really)
- syn keyword rConstant T F LETTERS letters month.abb month.name pi
- syn keyword rConstant R.version.string
- syn keyword rNumber NA_integer_ NA_real_ NA_complex_ NA_character_
- " Constants
- syn keyword rConstant NULL
- syn keyword rBoolean FALSE TRUE
- syn keyword rNumber NA Inf NaN
- " integer
- syn match rInteger "\<\d\+L"
- syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L"
- syn match rInteger "\<\d\+[Ee]+\=\d\+L"
- " number with no fractional part or exponent
- syn match rNumber "\<\d\+\>"
- " hexadecimal number
- syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+"
- " floating point number with integer and fractional parts and optional exponent
- syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\="
- " floating point number with no integer part and optional exponent
- syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\="
- " floating point number with no fractional part and optional exponent
- syn match rFloat "\<\d\+[Ee][-+]\=\d\+"
- " complex number
- syn match rComplex "\<\d\+i"
- syn match rComplex "\<\d\++\d\+i"
- syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i"
- syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i"
- syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i"
- syn match rComplex "\<\d\+[Ee][-+]\=\d\+i"
- syn match rAssign '='
- syn match rOperator "&"
- syn match rOperator '-'
- syn match rOperator '\*'
- syn match rOperator '+'
- if &filetype != "rmd" && &filetype != "rrst"
- syn match rOperator "[|!<>^~/:]"
- else
- syn match rOperator "[|!<>^~`/:]"
- endif
- syn match rOperator "%\{2}\|%\S\{-}%"
- syn match rOperator '\([!><]\)\@<=='
- syn match rOperator '=='
- syn match rOpError '\*\{3}'
- syn match rOpError '//'
- syn match rOpError '&&&'
- syn match rOpError '|||'
- syn match rOpError '<<'
- syn match rOpError '>>'
- syn match rAssign "<\{1,2}-"
- syn match rAssign "->\{1,2}"
- " Special
- syn match rDelimiter "[,;:]"
- " Error
- if exists("g:r_syntax_folding")
- syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
- syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold
- syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold
- syn region rSection matchgroup=Title start=/^#.*[-=#]\{4,}/ end=/^#.*[-=#]\{4,}/ms=s-2,me=s-1 transparent contains=ALL fold
- else
- syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
- syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
- syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
- endif
- syn match rError "[)\]}]"
- syn match rBraceError "[)}]" contained
- syn match rCurlyError "[)\]]" contained
- syn match rParenError "[\]}]" contained
- " Use Nvim-R to highlight functions dynamically if it is installed
- if !exists("g:r_syntax_fun_pattern")
- let s:ff = split(substitute(globpath(&rtp, "R/functions.vim"), "functions.vim", "", "g"), "\n")
- if len(s:ff) > 0
- let g:r_syntax_fun_pattern = 0
- else
- let g:r_syntax_fun_pattern = 1
- endif
- endif
- " Only use Nvim-R to highlight functions if they should not be highlighted
- " according to a generic pattern
- if g:r_syntax_fun_pattern == 1
- syn match rFunction '[0-9a-zA-Z_\.]\+\s*\ze('
- else
- " Nvim-R:
- runtime R/functions.vim
- endif
- syn match rDollar display contained "\$"
- syn match rDollar display contained "@"
- " List elements will not be highlighted as functions:
- syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar
- syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar
- " Functions that may add new objects
- syn keyword rPreProc library require attach detach source
- if &filetype == "rhelp"
- syn match rHelpIdent '\\method'
- syn match rHelpIdent '\\S4method'
- endif
- " Type
- syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame
- " Name of object with spaces
- if &filetype != "rmd" && &filetype != "rrst"
- syn region rNameWSpace start="`" end="`" contains=rSpaceFun
- endif
- if &filetype == "rhelp"
- syn match rhPreProc "^#ifdef.*"
- syn match rhPreProc "^#endif.*"
- syn match rhSection "\\dontrun\>"
- endif
- if exists("r_syntax_minlines")
- exe "syn sync minlines=" . r_syntax_minlines
- else
- syn sync minlines=40
- endif
- " Define the default highlighting.
- hi def link rAssign Statement
- hi def link rBoolean Boolean
- hi def link rBraceError Error
- hi def link rComment Comment
- hi def link rTodoParen Comment
- hi def link rTodoInfo SpecialComment
- hi def link rCommentTodo Todo
- hi def link rTodoKeyw Todo
- hi def link rComplex Number
- hi def link rConditional Conditional
- hi def link rConstant Constant
- hi def link rCurlyError Error
- hi def link rDelimiter Delimiter
- hi def link rDollar SpecialChar
- hi def link rError Error
- hi def link rFloat Float
- hi def link rFunction Function
- hi def link rSpaceFun Function
- hi def link rHelpIdent Identifier
- hi def link rhPreProc PreProc
- hi def link rhSection PreCondit
- hi def link rInteger Number
- hi def link rLstElmt Normal
- hi def link rNameWSpace Normal
- hi def link rNumber Number
- hi def link rOperator Operator
- hi def link rOpError Error
- hi def link rParenError Error
- hi def link rPreProc PreProc
- hi def link rRawString String
- hi def link rRawStrDelim Delimiter
- hi def link rRepeat Repeat
- hi def link rSpecial SpecialChar
- hi def link rStatement Statement
- hi def link rString String
- hi def link rStrError Error
- hi def link rType Type
- if g:r_syntax_hl_roxygen
- hi def link rOTitleTag Operator
- hi def link rOTag Operator
- hi def link rOTitleBlock Title
- hi def link rOBlock Comment
- hi def link rOBlockNoTitle Comment
- hi def link rOR6Block Comment
- hi def link rOTitle Title
- hi def link rOCommentKey Comment
- hi def link rOExamples SpecialComment
- endif
- let b:current_syntax="r"
- " vim: ts=8 sw=2
|