1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: R (GNU S) 3483c5d80SBram Moolenaar" Maintainer: Jakson Aquino <[email protected]> 4483c5d80SBram Moolenaar" Former Maintainers: Vaidotas Zemlys <[email protected]> 5483c5d80SBram Moolenaar" Tom Payne <[email protected]> 62c5e8e80SBram Moolenaar" Contributor: Johannes Ranke <[email protected]> 72c5e8e80SBram Moolenaar" Homepage: https://github.com/jalvesaq/R-Vim-runtime 8*11e3c5baSBram Moolenaar" Last Change: Sun Mar 28, 2021 01:47PM 9483c5d80SBram Moolenaar" Filenames: *.R *.r *.Rhistory *.Rt 10483c5d80SBram Moolenaar" 11cd5c8f82SBram Moolenaar" NOTE: The highlighting of R functions might be defined in 128feef4ffSBram Moolenaar" runtime files created by a filetype plugin, if installed. 13483c5d80SBram Moolenaar" 14662db673SBram Moolenaar" CONFIGURATION: 1577cdfd10SBram Moolenaar" Syntax folding can be turned on by 16662db673SBram Moolenaar" 17662db673SBram Moolenaar" let r_syntax_folding = 1 18662db673SBram Moolenaar" 1977cdfd10SBram Moolenaar" ROxygen highlighting can be turned off by 2077cdfd10SBram Moolenaar" 21cd5c8f82SBram Moolenaar" let r_syntax_hl_roxygen = 0 2277cdfd10SBram Moolenaar" 23483c5d80SBram Moolenaar" Some lines of code were borrowed from Zhuojun Chen. 244770d09aSBram Moolenaar 25483c5d80SBram Moolenaarif exists("b:current_syntax") 26071d4279SBram Moolenaar finish 27071d4279SBram Moolenaarendif 28071d4279SBram Moolenaar 29cd5c8f82SBram Moolenaarif has("patch-7.4.1142") 30e4a3bcf2SBram Moolenaar syn iskeyword @,48-57,_,. 31cd5c8f82SBram Moolenaarelse 32cd5c8f82SBram Moolenaar setlocal iskeyword=@,48-57,_,. 33cd5c8f82SBram Moolenaarendif 34cd5c8f82SBram Moolenaar 35cd5c8f82SBram Moolenaar" The variables g:r_hl_roxygen and g:r_syn_minlines were renamed on April 8, 2017. 36cd5c8f82SBram Moolenaarif exists("g:r_hl_roxygen") 37cd5c8f82SBram Moolenaar let g:r_syntax_hl_roxygen = g:r_hl_roxygen 38cd5c8f82SBram Moolenaarendif 39cd5c8f82SBram Moolenaarif exists("g:r_syn_minlines") 40cd5c8f82SBram Moolenaar let g:r_syntax_minlines = g:r_syn_minlines 41cd5c8f82SBram Moolenaarendif 42071d4279SBram Moolenaar 4377cdfd10SBram Moolenaarif exists("g:r_syntax_folding") && g:r_syntax_folding 44662db673SBram Moolenaar setlocal foldmethod=syntax 45662db673SBram Moolenaarendif 46fc65cabbSBram Moolenaar 47fc65cabbSBram Moolenaarlet g:r_syntax_hl_roxygen = get(g:, 'r_syntax_hl_roxygen', 1) 48662db673SBram Moolenaar 49071d4279SBram Moolenaarsyn case match 50071d4279SBram Moolenaar 51071d4279SBram Moolenaar" Comment 52db6ea063SBram Moolenaarsyn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):" 53fc65cabbSBram Moolenaarsyn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent 54fc65cabbSBram Moolenaarsyn keyword rTodoKeyw BUG FIXME NOTE TODO contained 55fc65cabbSBram Moolenaarsyn match rTodoInfo "(\zs.\{-}\ze)" contained 56*11e3c5baSBram Moolenaarsyn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*" 57203d04d7SBram Moolenaar 58203d04d7SBram Moolenaar" Roxygen 59cd5c8f82SBram Moolenaarif g:r_syntax_hl_roxygen 60cd5c8f82SBram Moolenaar " A roxygen block can start at the beginning of a file (first version) and 61*11e3c5baSBram Moolenaar " after a blank line (second version). It ends when a line appears that does not 62cd5c8f82SBram Moolenaar " contain a roxygen comment. In the following comments, any line containing 63cd5c8f82SBram Moolenaar " a roxygen comment marker (one or two hash signs # followed by a single 64cd5c8f82SBram Moolenaar " quote ' and preceded only by whitespace) is called a roxygen line. A 65cd5c8f82SBram Moolenaar " roxygen line containing only a roxygen comment marker, optionally followed 66cd5c8f82SBram Moolenaar " by whitespace is called an empty roxygen line. 672c5e8e80SBram Moolenaar 68cd5c8f82SBram Moolenaar " First we match all roxygen blocks as containing only a title. In case an 69cd5c8f82SBram Moolenaar " empty roxygen line ending the title or a tag is found, this will be 70fc65cabbSBram Moolenaar " overridden later by the definitions of rOBlock. 71cd5c8f82SBram Moolenaar syn match rOTitleBlock "\%^\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag 72cd5c8f82SBram Moolenaar syn match rOTitleBlock "^\s*\n\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag 732c5e8e80SBram Moolenaar 74*11e3c5baSBram Moolenaar " A title as part of a block is always at the beginning of the block, i.e. 75*11e3c5baSBram Moolenaar " either at the start of a file or after a completely empty line. 76*11e3c5baSBram Moolenaar syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag 77*11e3c5baSBram Moolenaar syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag 78*11e3c5baSBram Moolenaar syn match rOTitleTag contained "@title" 79*11e3c5baSBram Moolenaar 80cd5c8f82SBram Moolenaar " When a roxygen block has a title and additional content, the title 81cd5c8f82SBram Moolenaar " consists of one or more roxygen lines (as little as possible are matched), 82cd5c8f82SBram Moolenaar " followed either by an empty roxygen line 83cd5c8f82SBram Moolenaar syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold 84cd5c8f82SBram Moolenaar 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 85cd5c8f82SBram Moolenaar 86cd5c8f82SBram Moolenaar " or by a roxygen tag (we match everything starting with @ but not @@ which is used as escape sequence for a literal @). 87cd5c8f82SBram Moolenaar syn region rOBlock start="\%^\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold 88cd5c8f82SBram Moolenaar syn region rOBlock start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-}\s*#\{1,2}' @\(@\)\@!" end="^\s*\(#\{1,2}'\)\@!" contains=rOTitle,rOTag,rOExamples,@Spell keepend fold 89cd5c8f82SBram Moolenaar 90cd5c8f82SBram Moolenaar " If a block contains an @rdname, @describeIn tag, it may have paragraph breaks, but does not have a title 91cd5c8f82SBram Moolenaar 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 92cd5c8f82SBram Moolenaar 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 93cd5c8f82SBram Moolenaar 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 94cd5c8f82SBram Moolenaar 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 95cd5c8f82SBram Moolenaar 96fc65cabbSBram Moolenaar syn match rOCommentKey "^\s*#\{1,2}'" contained 97*11e3c5baSBram Moolenaar syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold 98cd5c8f82SBram Moolenaar 99*11e3c5baSBram Moolenaar " R6 classes may contain roxygen lines independent of roxygen blocks 100*11e3c5baSBram Moolenaar syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold 101*11e3c5baSBram Moolenaar syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained 102*11e3c5baSBram Moolenaar syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained 103*11e3c5baSBram Moolenaar 104*11e3c5baSBram Moolenaar " rOTag list originally generated from the lists that were available in 105cd5c8f82SBram Moolenaar " https://github.com/klutometis/roxygen/R/rd.R and 106cd5c8f82SBram Moolenaar " https://github.com/klutometis/roxygen/R/namespace.R 107cd5c8f82SBram Moolenaar " using s/^ \([A-Za-z0-9]*\) = .*/ syn match rOTag contained "@\1"/ 108cd5c8f82SBram Moolenaar " Plus we need the @include tag 109cd5c8f82SBram Moolenaar 110cd5c8f82SBram Moolenaar " rd.R 111cd5c8f82SBram Moolenaar syn match rOTag contained "@aliases" 112cd5c8f82SBram Moolenaar syn match rOTag contained "@author" 113cd5c8f82SBram Moolenaar syn match rOTag contained "@backref" 114cd5c8f82SBram Moolenaar syn match rOTag contained "@concept" 115cd5c8f82SBram Moolenaar syn match rOTag contained "@describeIn" 116cd5c8f82SBram Moolenaar syn match rOTag contained "@description" 117cd5c8f82SBram Moolenaar syn match rOTag contained "@details" 118cd5c8f82SBram Moolenaar syn match rOTag contained "@docType" 119cd5c8f82SBram Moolenaar syn match rOTag contained "@encoding" 120cd5c8f82SBram Moolenaar syn match rOTag contained "@evalRd" 121cd5c8f82SBram Moolenaar syn match rOTag contained "@example" 122cd5c8f82SBram Moolenaar syn match rOTag contained "@examples" 123cd5c8f82SBram Moolenaar syn match rOTag contained "@family" 124cd5c8f82SBram Moolenaar syn match rOTag contained "@field" 125cd5c8f82SBram Moolenaar syn match rOTag contained "@format" 126cd5c8f82SBram Moolenaar syn match rOTag contained "@inherit" 127cd5c8f82SBram Moolenaar syn match rOTag contained "@inheritParams" 128cd5c8f82SBram Moolenaar syn match rOTag contained "@inheritDotParams" 129cd5c8f82SBram Moolenaar syn match rOTag contained "@inheritSection" 130cd5c8f82SBram Moolenaar syn match rOTag contained "@keywords" 131cd5c8f82SBram Moolenaar syn match rOTag contained "@method" 132cd5c8f82SBram Moolenaar syn match rOTag contained "@name" 133cd5c8f82SBram Moolenaar syn match rOTag contained "@md" 134cd5c8f82SBram Moolenaar syn match rOTag contained "@noMd" 135cd5c8f82SBram Moolenaar syn match rOTag contained "@noRd" 136cd5c8f82SBram Moolenaar syn match rOTag contained "@note" 137cd5c8f82SBram Moolenaar syn match rOTag contained "@param" 138cd5c8f82SBram Moolenaar syn match rOTag contained "@rdname" 139cd5c8f82SBram Moolenaar syn match rOTag contained "@rawRd" 140cd5c8f82SBram Moolenaar syn match rOTag contained "@references" 141cd5c8f82SBram Moolenaar syn match rOTag contained "@return" 142cd5c8f82SBram Moolenaar syn match rOTag contained "@section" 143cd5c8f82SBram Moolenaar syn match rOTag contained "@seealso" 144cd5c8f82SBram Moolenaar syn match rOTag contained "@slot" 145cd5c8f82SBram Moolenaar syn match rOTag contained "@source" 146cd5c8f82SBram Moolenaar syn match rOTag contained "@template" 147cd5c8f82SBram Moolenaar syn match rOTag contained "@templateVar" 148cd5c8f82SBram Moolenaar syn match rOTag contained "@title" 149cd5c8f82SBram Moolenaar syn match rOTag contained "@usage" 150cd5c8f82SBram Moolenaar " namespace.R 151cd5c8f82SBram Moolenaar syn match rOTag contained "@export" 152cd5c8f82SBram Moolenaar syn match rOTag contained "@exportClass" 153cd5c8f82SBram Moolenaar syn match rOTag contained "@exportMethod" 154cd5c8f82SBram Moolenaar syn match rOTag contained "@exportPattern" 155cd5c8f82SBram Moolenaar syn match rOTag contained "@import" 156cd5c8f82SBram Moolenaar syn match rOTag contained "@importClassesFrom" 157cd5c8f82SBram Moolenaar syn match rOTag contained "@importFrom" 158cd5c8f82SBram Moolenaar syn match rOTag contained "@importMethodsFrom" 159cd5c8f82SBram Moolenaar syn match rOTag contained "@rawNamespace" 160cd5c8f82SBram Moolenaar syn match rOTag contained "@S3method" 161cd5c8f82SBram Moolenaar syn match rOTag contained "@useDynLib" 162cd5c8f82SBram Moolenaar " other 163*11e3c5baSBram Moolenaar syn match rOTag contained "@eval" 164cd5c8f82SBram Moolenaar syn match rOTag contained "@include" 165*11e3c5baSBram Moolenaar syn match rOTag contained "@includeRmd" 166*11e3c5baSBram Moolenaar syn match rOTag contained "@order" 16777cdfd10SBram Moolenaarendif 168203d04d7SBram Moolenaar 169071d4279SBram Moolenaar 170662db673SBram Moolenaarif &filetype == "rhelp" 171662db673SBram Moolenaar " string enclosed in double quotes 172662db673SBram Moolenaar syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/ 173662db673SBram Moolenaar " string enclosed in single quotes 174662db673SBram Moolenaar syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/ 175662db673SBram Moolenaarelse 176071d4279SBram Moolenaar " string enclosed in double quotes 177483c5d80SBram Moolenaar syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/ 178071d4279SBram Moolenaar " string enclosed in single quotes 179483c5d80SBram Moolenaar syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/ 180662db673SBram Moolenaarendif 181071d4279SBram Moolenaar 182483c5d80SBram Moolenaarsyn match rStrError display contained "\\." 183483c5d80SBram Moolenaar 184662db673SBram Moolenaar 185483c5d80SBram Moolenaar" New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash 186483c5d80SBram Moolenaarsyn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\" 187483c5d80SBram Moolenaar 188483c5d80SBram Moolenaar" Hexadecimal and Octal digits 189483c5d80SBram Moolenaarsyn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)" 190483c5d80SBram Moolenaar 191483c5d80SBram Moolenaar" Unicode characters 192483c5d80SBram Moolenaarsyn match rSpecial display contained "\\u\x\{1,4}" 193483c5d80SBram Moolenaarsyn match rSpecial display contained "\\U\x\{1,8}" 194483c5d80SBram Moolenaarsyn match rSpecial display contained "\\u{\x\{1,4}}" 195483c5d80SBram Moolenaarsyn match rSpecial display contained "\\U{\x\{1,8}}" 196483c5d80SBram Moolenaar 197*11e3c5baSBram Moolenaar" Raw string 198*11e3c5baSBram Moolenaarsyn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend 199*11e3c5baSBram Moolenaarsyn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend 200*11e3c5baSBram Moolenaarsyn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend 201*11e3c5baSBram Moolenaar 202071d4279SBram Moolenaar" Statement 203071d4279SBram Moolenaarsyn keyword rStatement break next return 204071d4279SBram Moolenaarsyn keyword rConditional if else 205071d4279SBram Moolenaarsyn keyword rRepeat for in repeat while 206071d4279SBram Moolenaar 207483c5d80SBram Moolenaar" Constant (not really) 208203d04d7SBram Moolenaarsyn keyword rConstant T F LETTERS letters month.abb month.name pi 209483c5d80SBram Moolenaarsyn keyword rConstant R.version.string 210483c5d80SBram Moolenaar 211662db673SBram Moolenaarsyn keyword rNumber NA_integer_ NA_real_ NA_complex_ NA_character_ 212662db673SBram Moolenaar 213662db673SBram Moolenaar" Constants 214071d4279SBram Moolenaarsyn keyword rConstant NULL 215071d4279SBram Moolenaarsyn keyword rBoolean FALSE TRUE 216662db673SBram Moolenaarsyn keyword rNumber NA Inf NaN 217071d4279SBram Moolenaar 218483c5d80SBram Moolenaar" integer 219483c5d80SBram Moolenaarsyn match rInteger "\<\d\+L" 220483c5d80SBram Moolenaarsyn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L" 221483c5d80SBram Moolenaarsyn match rInteger "\<\d\+[Ee]+\=\d\+L" 222483c5d80SBram Moolenaar 223483c5d80SBram Moolenaar" number with no fractional part or exponent 224483c5d80SBram Moolenaarsyn match rNumber "\<\d\+\>" 225483c5d80SBram Moolenaar" hexadecimal number 226483c5d80SBram Moolenaarsyn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+" 227483c5d80SBram Moolenaar 228483c5d80SBram Moolenaar" floating point number with integer and fractional parts and optional exponent 229483c5d80SBram Moolenaarsyn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=" 230483c5d80SBram Moolenaar" floating point number with no integer part and optional exponent 231483c5d80SBram Moolenaarsyn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\=" 232483c5d80SBram Moolenaar" floating point number with no fractional part and optional exponent 233483c5d80SBram Moolenaarsyn match rFloat "\<\d\+[Ee][-+]\=\d\+" 234483c5d80SBram Moolenaar 235662db673SBram Moolenaar" complex number 236662db673SBram Moolenaarsyn match rComplex "\<\d\+i" 237662db673SBram Moolenaarsyn match rComplex "\<\d\++\d\+i" 238662db673SBram Moolenaarsyn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i" 239662db673SBram Moolenaarsyn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i" 240662db673SBram Moolenaarsyn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i" 241662db673SBram Moolenaarsyn match rComplex "\<\d\+[Ee][-+]\=\d\+i" 242662db673SBram Moolenaar 2438feef4ffSBram Moolenaarsyn match rAssign '=' 244662db673SBram Moolenaarsyn match rOperator "&" 245662db673SBram Moolenaarsyn match rOperator '-' 246e6ae6225SBram Moolenaarsyn match rOperator '\*' 247662db673SBram Moolenaarsyn match rOperator '+' 248203d04d7SBram Moolenaarif &filetype != "rmd" && &filetype != "rrst" 249203d04d7SBram Moolenaar syn match rOperator "[|!<>^~/:]" 250203d04d7SBram Moolenaarelse 251203d04d7SBram Moolenaar syn match rOperator "[|!<>^~`/:]" 252203d04d7SBram Moolenaarendif 253db6ea063SBram Moolenaarsyn match rOperator "%\{2}\|%\S\{-}%" 2548feef4ffSBram Moolenaarsyn match rOperator '\([!><]\)\@<==' 2558feef4ffSBram Moolenaarsyn match rOperator '==' 256203d04d7SBram Moolenaarsyn match rOpError '\*\{3}' 257662db673SBram Moolenaarsyn match rOpError '//' 258662db673SBram Moolenaarsyn match rOpError '&&&' 259662db673SBram Moolenaarsyn match rOpError '|||' 260662db673SBram Moolenaarsyn match rOpError '<<' 261662db673SBram Moolenaarsyn match rOpError '>>' 262662db673SBram Moolenaar 2638feef4ffSBram Moolenaarsyn match rAssign "<\{1,2}-" 2648feef4ffSBram Moolenaarsyn match rAssign "->\{1,2}" 265071d4279SBram Moolenaar 266071d4279SBram Moolenaar" Special 267483c5d80SBram Moolenaarsyn match rDelimiter "[,;:]" 268071d4279SBram Moolenaar 269071d4279SBram Moolenaar" Error 270662db673SBram Moolenaarif exists("g:r_syntax_folding") 271662db673SBram Moolenaar syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold 272662db673SBram Moolenaar syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold 273662db673SBram Moolenaar syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold 274fc65cabbSBram Moolenaar syn region rSection matchgroup=Title start=/^#.*[-=#]\{4,}/ end=/^#.*[-=#]\{4,}/ms=s-2,me=s-1 transparent contains=ALL fold 275662db673SBram Moolenaarelse 276071d4279SBram Moolenaar syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError 277071d4279SBram Moolenaar syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError 278071d4279SBram Moolenaar syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError 279662db673SBram Moolenaarendif 280662db673SBram Moolenaar 281483c5d80SBram Moolenaarsyn match rError "[)\]}]" 282483c5d80SBram Moolenaarsyn match rBraceError "[)}]" contained 283483c5d80SBram Moolenaarsyn match rCurlyError "[)\]]" contained 284483c5d80SBram Moolenaarsyn match rParenError "[\]}]" contained 285483c5d80SBram Moolenaar 286cd5c8f82SBram Moolenaar" Use Nvim-R to highlight functions dynamically if it is installed 287cd5c8f82SBram Moolenaarif !exists("g:r_syntax_fun_pattern") 288cd5c8f82SBram Moolenaar let s:ff = split(substitute(globpath(&rtp, "R/functions.vim"), "functions.vim", "", "g"), "\n") 289cd5c8f82SBram Moolenaar if len(s:ff) > 0 290cd5c8f82SBram Moolenaar let g:r_syntax_fun_pattern = 0 291cd5c8f82SBram Moolenaar else 292cd5c8f82SBram Moolenaar let g:r_syntax_fun_pattern = 1 293cd5c8f82SBram Moolenaar endif 294cd5c8f82SBram Moolenaarendif 295cd5c8f82SBram Moolenaar 296cd5c8f82SBram Moolenaar" Only use Nvim-R to highlight functions if they should not be highlighted 297cd5c8f82SBram Moolenaar" according to a generic pattern 298cd5c8f82SBram Moolenaarif g:r_syntax_fun_pattern == 1 299cd5c8f82SBram Moolenaar syn match rFunction '[0-9a-zA-Z_\.]\+\s*\ze(' 300cd5c8f82SBram Moolenaarelse 30177cdfd10SBram Moolenaar " Nvim-R: 3028feef4ffSBram Moolenaar runtime R/functions.vim 3038feef4ffSBram Moolenaarendif 304662db673SBram Moolenaar 305662db673SBram Moolenaarsyn match rDollar display contained "\$" 306203d04d7SBram Moolenaarsyn match rDollar display contained "@" 307662db673SBram Moolenaar 308662db673SBram Moolenaar" List elements will not be highlighted as functions: 309662db673SBram Moolenaarsyn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar 310203d04d7SBram Moolenaarsyn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar 311662db673SBram Moolenaar 312483c5d80SBram Moolenaar" Functions that may add new objects 313483c5d80SBram Moolenaarsyn keyword rPreProc library require attach detach source 314483c5d80SBram Moolenaar 315662db673SBram Moolenaarif &filetype == "rhelp" 316662db673SBram Moolenaar syn match rHelpIdent '\\method' 317662db673SBram Moolenaar syn match rHelpIdent '\\S4method' 318662db673SBram Moolenaarendif 319662db673SBram Moolenaar 320483c5d80SBram Moolenaar" Type 321483c5d80SBram Moolenaarsyn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame 322071d4279SBram Moolenaar 323662db673SBram Moolenaar" Name of object with spaces 324203d04d7SBram Moolenaarif &filetype != "rmd" && &filetype != "rrst" 325fc65cabbSBram Moolenaar syn region rNameWSpace start="`" end="`" contains=rSpaceFun 326203d04d7SBram Moolenaarendif 327662db673SBram Moolenaar 328662db673SBram Moolenaarif &filetype == "rhelp" 329662db673SBram Moolenaar syn match rhPreProc "^#ifdef.*" 330662db673SBram Moolenaar syn match rhPreProc "^#endif.*" 331662db673SBram Moolenaar syn match rhSection "\\dontrun\>" 332662db673SBram Moolenaarendif 333662db673SBram Moolenaar 334cd5c8f82SBram Moolenaarif exists("r_syntax_minlines") 335cd5c8f82SBram Moolenaar exe "syn sync minlines=" . r_syntax_minlines 3368feef4ffSBram Moolenaarelse 3378feef4ffSBram Moolenaar syn sync minlines=40 3388feef4ffSBram Moolenaarendif 3398feef4ffSBram Moolenaar 340071d4279SBram Moolenaar" Define the default highlighting. 3418feef4ffSBram Moolenaarhi def link rAssign Statement 342483c5d80SBram Moolenaarhi def link rBoolean Boolean 343483c5d80SBram Moolenaarhi def link rBraceError Error 344483c5d80SBram Moolenaarhi def link rComment Comment 345fc65cabbSBram Moolenaarhi def link rTodoParen Comment 346fc65cabbSBram Moolenaarhi def link rTodoInfo SpecialComment 347db6ea063SBram Moolenaarhi def link rCommentTodo Todo 348fc65cabbSBram Moolenaarhi def link rTodoKeyw Todo 349483c5d80SBram Moolenaarhi def link rComplex Number 350483c5d80SBram Moolenaarhi def link rConditional Conditional 351483c5d80SBram Moolenaarhi def link rConstant Constant 352483c5d80SBram Moolenaarhi def link rCurlyError Error 353483c5d80SBram Moolenaarhi def link rDelimiter Delimiter 354483c5d80SBram Moolenaarhi def link rDollar SpecialChar 355483c5d80SBram Moolenaarhi def link rError Error 356483c5d80SBram Moolenaarhi def link rFloat Float 357662db673SBram Moolenaarhi def link rFunction Function 358fc65cabbSBram Moolenaarhi def link rSpaceFun Function 359662db673SBram Moolenaarhi def link rHelpIdent Identifier 360662db673SBram Moolenaarhi def link rhPreProc PreProc 361662db673SBram Moolenaarhi def link rhSection PreCondit 362483c5d80SBram Moolenaarhi def link rInteger Number 363662db673SBram Moolenaarhi def link rLstElmt Normal 364662db673SBram Moolenaarhi def link rNameWSpace Normal 365483c5d80SBram Moolenaarhi def link rNumber Number 366483c5d80SBram Moolenaarhi def link rOperator Operator 367662db673SBram Moolenaarhi def link rOpError Error 368483c5d80SBram Moolenaarhi def link rParenError Error 369483c5d80SBram Moolenaarhi def link rPreProc PreProc 370*11e3c5baSBram Moolenaarhi def link rRawString String 371*11e3c5baSBram Moolenaarhi def link rRawStrDelim Delimiter 372483c5d80SBram Moolenaarhi def link rRepeat Repeat 373483c5d80SBram Moolenaarhi def link rSpecial SpecialChar 374483c5d80SBram Moolenaarhi def link rStatement Statement 375483c5d80SBram Moolenaarhi def link rString String 376483c5d80SBram Moolenaarhi def link rStrError Error 377483c5d80SBram Moolenaarhi def link rType Type 378cd5c8f82SBram Moolenaarif g:r_syntax_hl_roxygen 379cd5c8f82SBram Moolenaar hi def link rOTitleTag Operator 380cd5c8f82SBram Moolenaar hi def link rOTag Operator 381cd5c8f82SBram Moolenaar hi def link rOTitleBlock Title 3822c5e8e80SBram Moolenaar hi def link rOBlock Comment 383cd5c8f82SBram Moolenaar hi def link rOBlockNoTitle Comment 384*11e3c5baSBram Moolenaar hi def link rOR6Block Comment 3852c5e8e80SBram Moolenaar hi def link rOTitle Title 3862c5e8e80SBram Moolenaar hi def link rOCommentKey Comment 3872c5e8e80SBram Moolenaar hi def link rOExamples SpecialComment 38877cdfd10SBram Moolenaarendif 3892c5e8e80SBram Moolenaar 390071d4279SBram Moolenaarlet b:current_syntax="r" 391071d4279SBram Moolenaar 392071d4279SBram Moolenaar" vim: ts=8 sw=2 393