Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim syntax file |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 2 | " Language: R (GNU S) |
| 3 | " Maintainer: Jakson Aquino <jalvesaq@gmail.com> |
| 4 | " Former Maintainers: Vaidotas Zemlys <zemlys@gmail.com> |
| 5 | " Tom Payne <tom@tompayne.org> |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 6 | " Contributor: Johannes Ranke <jranke@uni-bremen.de> |
| 7 | " Homepage: https://github.com/jalvesaq/R-Vim-runtime |
| 8 | " Last Change: Wed Oct 21, 2015 06:33AM |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 9 | " Filenames: *.R *.r *.Rhistory *.Rt |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 10 | " |
| 11 | " NOTE: The highlighting of R functions is defined in |
| 12 | " runtime files created by a filetype plugin, if installed. |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 13 | " |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 14 | " CONFIGURATION: |
| 15 | " syntax folding can be turned on by |
| 16 | " |
| 17 | " let r_syntax_folding = 1 |
| 18 | " |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 19 | " Some lines of code were borrowed from Zhuojun Chen. |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 20 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 21 | if exists("b:current_syntax") |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 22 | finish |
| 23 | endif |
| 24 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 25 | setlocal iskeyword=@,48-57,_,. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 26 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 27 | if exists("g:r_syntax_folding") |
| 28 | setlocal foldmethod=syntax |
| 29 | endif |
| 30 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 31 | syn case match |
| 32 | |
| 33 | " Comment |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 34 | syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):" |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 35 | syn match rComment contains=@Spell,rCommentTodo,rOBlock "#.*" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 36 | |
| 37 | " Roxygen |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 38 | syn region rOBlock start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\)\@!" contains=rOTitle,rOKeyword,rOExamples,@Spell keepend |
| 39 | syn region rOTitle start="^\s*\n#\{1,2}' " start="\%^#\{1,2}' " end="^\(#\{1,2}'\s*$\)\@=" contained contains=rOCommentKey |
| 40 | syn match rOCommentKey "#\{1,2}'" containedin=rOTitle contained |
| 41 | |
| 42 | syn region rOExamples start="^#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOKeyword |
| 43 | |
| 44 | syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|example\|include\|docType\)" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 45 | syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)" |
| 46 | syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 47 | syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\|useDynLib\)" |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 48 | syn match rOKeyword contained "@\(method\|noRd\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)" |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 49 | syn match rOKeyword contained "@\(family\|template\|templateVar\|description\|details\|inheritParams\|field\)" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 50 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 51 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 52 | if &filetype == "rhelp" |
| 53 | " string enclosed in double quotes |
| 54 | syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/ |
| 55 | " string enclosed in single quotes |
| 56 | syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/ |
| 57 | else |
| 58 | " string enclosed in double quotes |
| 59 | syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/ |
| 60 | " string enclosed in single quotes |
| 61 | syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/ |
| 62 | endif |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 63 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 64 | syn match rStrError display contained "\\." |
| 65 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 66 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 67 | " New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash |
| 68 | syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\" |
| 69 | |
| 70 | " Hexadecimal and Octal digits |
| 71 | syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)" |
| 72 | |
| 73 | " Unicode characters |
| 74 | syn match rSpecial display contained "\\u\x\{1,4}" |
| 75 | syn match rSpecial display contained "\\U\x\{1,8}" |
| 76 | syn match rSpecial display contained "\\u{\x\{1,4}}" |
| 77 | syn match rSpecial display contained "\\U{\x\{1,8}}" |
| 78 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 79 | " Statement |
| 80 | syn keyword rStatement break next return |
| 81 | syn keyword rConditional if else |
| 82 | syn keyword rRepeat for in repeat while |
| 83 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 84 | " Constant (not really) |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 85 | syn keyword rConstant T F LETTERS letters month.abb month.name pi |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 86 | syn keyword rConstant R.version.string |
| 87 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 88 | syn keyword rNumber NA_integer_ NA_real_ NA_complex_ NA_character_ |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 89 | |
| 90 | " Constants |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 91 | syn keyword rConstant NULL |
| 92 | syn keyword rBoolean FALSE TRUE |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 93 | syn keyword rNumber NA Inf NaN |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 94 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 95 | " integer |
| 96 | syn match rInteger "\<\d\+L" |
| 97 | syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L" |
| 98 | syn match rInteger "\<\d\+[Ee]+\=\d\+L" |
| 99 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 100 | " number with no fractional part or exponent |
| 101 | syn match rNumber "\<\d\+\>" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 102 | " hexadecimal number |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 103 | syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+" |
| 104 | |
| 105 | " floating point number with integer and fractional parts and optional exponent |
| 106 | syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=" |
| 107 | " floating point number with no integer part and optional exponent |
| 108 | syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\=" |
| 109 | " floating point number with no fractional part and optional exponent |
| 110 | syn match rFloat "\<\d\+[Ee][-+]\=\d\+" |
| 111 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 112 | " complex number |
| 113 | syn match rComplex "\<\d\+i" |
| 114 | syn match rComplex "\<\d\++\d\+i" |
| 115 | syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i" |
| 116 | syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i" |
| 117 | syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i" |
| 118 | syn match rComplex "\<\d\+[Ee][-+]\=\d\+i" |
| 119 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 120 | syn match rAssign '=' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 121 | syn match rOperator "&" |
| 122 | syn match rOperator '-' |
Bram Moolenaar | e6ae622 | 2013-05-21 21:01:10 +0200 | [diff] [blame] | 123 | syn match rOperator '\*' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 124 | syn match rOperator '+' |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 125 | if &filetype != "rmd" && &filetype != "rrst" |
| 126 | syn match rOperator "[|!<>^~/:]" |
| 127 | else |
| 128 | syn match rOperator "[|!<>^~`/:]" |
| 129 | endif |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 130 | syn match rOperator "%\{2}\|%\S\{-}%" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 131 | syn match rOperator '\([!><]\)\@<==' |
| 132 | syn match rOperator '==' |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 133 | syn match rOpError '\*\{3}' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 134 | syn match rOpError '//' |
| 135 | syn match rOpError '&&&' |
| 136 | syn match rOpError '|||' |
| 137 | syn match rOpError '<<' |
| 138 | syn match rOpError '>>' |
| 139 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 140 | syn match rAssign "<\{1,2}-" |
| 141 | syn match rAssign "->\{1,2}" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 142 | |
| 143 | " Special |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 144 | syn match rDelimiter "[,;:]" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 145 | |
| 146 | " Error |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 147 | if exists("g:r_syntax_folding") |
| 148 | syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold |
| 149 | syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold |
| 150 | syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold |
| 151 | else |
| 152 | syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError |
| 153 | syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError |
| 154 | syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError |
| 155 | endif |
| 156 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 157 | syn match rError "[)\]}]" |
| 158 | syn match rBraceError "[)}]" contained |
| 159 | syn match rCurlyError "[)\]]" contained |
| 160 | syn match rParenError "[\]}]" contained |
| 161 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 162 | " Source list of R functions produced by a filetype plugin (if installed) |
| 163 | if has("nvim") |
| 164 | " Nvim-R |
| 165 | runtime R/functions.vim |
| 166 | else |
| 167 | " Vim-R-plugin |
| 168 | runtime r-plugin/functions.vim |
| 169 | endif |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 170 | |
| 171 | syn match rDollar display contained "\$" |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 172 | syn match rDollar display contained "@" |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 173 | |
| 174 | " List elements will not be highlighted as functions: |
| 175 | syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 176 | syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 177 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 178 | " Functions that may add new objects |
| 179 | syn keyword rPreProc library require attach detach source |
| 180 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 181 | if &filetype == "rhelp" |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 182 | syn match rHelpIdent '\\method' |
| 183 | syn match rHelpIdent '\\S4method' |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 184 | endif |
| 185 | |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 186 | " Type |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 187 | syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 188 | |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 189 | " Name of object with spaces |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 190 | if &filetype != "rmd" && &filetype != "rrst" |
| 191 | syn region rNameWSpace start="`" end="`" |
| 192 | endif |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 193 | |
| 194 | if &filetype == "rhelp" |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 195 | syn match rhPreProc "^#ifdef.*" |
| 196 | syn match rhPreProc "^#endif.*" |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 197 | syn match rhSection "\\dontrun\>" |
| 198 | endif |
| 199 | |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 200 | if exists("r_syn_minlines") |
| 201 | exe "syn sync minlines=" . r_syn_minlines |
| 202 | else |
| 203 | syn sync minlines=40 |
| 204 | endif |
| 205 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 206 | " Define the default highlighting. |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 207 | hi def link rAssign Statement |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 208 | hi def link rBoolean Boolean |
| 209 | hi def link rBraceError Error |
| 210 | hi def link rComment Comment |
Bram Moolenaar | db6ea06 | 2014-07-10 22:01:47 +0200 | [diff] [blame] | 211 | hi def link rCommentTodo Todo |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 212 | hi def link rComplex Number |
| 213 | hi def link rConditional Conditional |
| 214 | hi def link rConstant Constant |
| 215 | hi def link rCurlyError Error |
| 216 | hi def link rDelimiter Delimiter |
| 217 | hi def link rDollar SpecialChar |
| 218 | hi def link rError Error |
| 219 | hi def link rFloat Float |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 220 | hi def link rFunction Function |
| 221 | hi def link rHelpIdent Identifier |
| 222 | hi def link rhPreProc PreProc |
| 223 | hi def link rhSection PreCondit |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 224 | hi def link rInteger Number |
Bram Moolenaar | 8feef4f | 2015-01-07 16:57:10 +0100 | [diff] [blame] | 225 | hi def link rLstElmt Normal |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 226 | hi def link rNameWSpace Normal |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 227 | hi def link rNumber Number |
| 228 | hi def link rOperator Operator |
Bram Moolenaar | 662db67 | 2011-03-22 14:05:35 +0100 | [diff] [blame] | 229 | hi def link rOpError Error |
Bram Moolenaar | 483c5d8 | 2010-10-20 18:45:33 +0200 | [diff] [blame] | 230 | hi def link rParenError Error |
| 231 | hi def link rPreProc PreProc |
| 232 | hi def link rRepeat Repeat |
| 233 | hi def link rSpecial SpecialChar |
| 234 | hi def link rStatement Statement |
| 235 | hi def link rString String |
| 236 | hi def link rStrError Error |
| 237 | hi def link rType Type |
Bram Moolenaar | 203d04d | 2013-06-06 21:36:40 +0200 | [diff] [blame] | 238 | hi def link rOKeyword Title |
Bram Moolenaar | 2c5e8e8 | 2015-12-05 20:59:21 +0100 | [diff] [blame] | 239 | hi def link rOBlock Comment |
| 240 | hi def link rOTitle Title |
| 241 | hi def link rOCommentKey Comment |
| 242 | hi def link rOExamples SpecialComment |
| 243 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 244 | |
| 245 | let b:current_syntax="r" |
| 246 | |
| 247 | " vim: ts=8 sw=2 |