1" Vim syntax file 2" Language: SAS 3" Maintainer: James Kidd <james.kidd@covance.com> 4" Last Change: 18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com> 5" Fixed comments with * taking multiple lines. 6" Fixed highlighting of macro keywords. 7" Added words to cases that didn't fit anywhere. 8" 02 Jun 2003 9" Added highlighting for additional keywords and such; 10" Attempted to match SAS default syntax colors; 11" Changed syncing so it doesn't lose colors on large blocks; 12" Much thanks to Bob Heckel for knowledgeable tweaking. 13" For version 5.x: Clear all syntax items 14" For version 6.x: Quit when a syntax file was already loaded 15if version < 600 16 syntax clear 17elseif exists("b:current_syntax") 18 finish 19endif 20 21syn case ignore 22 23syn region sasString start=+"+ skip=+\\\\\|\\"+ end=+"+ 24syn region sasString start=+'+ skip=+\\\\\|\\"+ end=+'+ 25 26" Want region from 'cards;' to ';' to be captured (Bob Heckel) 27syn region sasCards start="^\s*CARDS.*" end="^\s*;\s*$" 28syn region sasCards start="^\s*DATALINES.*" end="^\s*;\s*$" 29 30syn match sasNumber "-\=\<\d*\.\=[0-9_]\>" 31 32" Block comment 33syn region sasComment start="/\*" end="\*/" contains=sasTodo 34 35" Ignore misleading //JCL SYNTAX... (Bob Heckel) 36syn region sasComment start="[^/][^/]/\*" end="\*/" contains=sasTodo 37 38" Previous code for comments was written by Bob Heckel 39" Comments with * may take multiple lines (Paulo Tanimoto) 40syn region sasComment start=";\s*\*"hs=s+1 end=";" contains=sasTodo 41 42" Comments with * starting after a semicolon (Paulo Tanimoto) 43syn region sasComment start="^\s*\*" end=";" contains=sasTodo 44 45" This line defines macro variables in code. HiLink at end of file 46" defines the color scheme. Begin region with ampersand and end with 47" any non-word character offset by -1; put ampersand in the skip list 48" just in case it is used to concatenate macro variable values. 49 50" Thanks to ronald h�llwarth for this fix to an intra-versioning 51" problem with this little feature 52 53if version < 600 54 syn region sasMacroVar start="\&" skip="[_&]" end="\W"he=e-1 55else " for the older Vim's just do it their way ... 56 syn region sasMacroVar start="&" skip="[_&]" end="\W"he=e-1 57endif 58 59 60" I dont think specific PROCs need to be listed if use this line (Bob Heckel). 61syn match sasProc "^\s*PROC \w\+" 62syn keyword sasStep RUN QUIT DATA 63 64 65" Base SAS Procs - version 8.1 66 67syn keyword sasConditional DO ELSE END IF THEN UNTIL WHILE 68 69syn keyword sasStatement ABORT ARRAY ATTRIB BY CALL CARDS CARDS4 CATNAME 70syn keyword sasStatement CONTINUE DATALINES DATALINES4 DELETE DISPLAY 71syn keyword sasStatement DM DROP ENDSAS ERROR FILE FILENAME FOOTNOTE 72syn keyword sasStatement FORMAT GOTO INFILE INFORMAT INPUT KEEP 73syn keyword sasStatement LABEL LEAVE LENGTH LIBNAME LINK LIST LOSTCARD 74syn keyword sasStatement MERGE MISSING MODIFY OPTIONS OUTPUT PAGE 75syn keyword sasStatement PUT REDIRECT REMOVE RENAME REPLACE RETAIN 76syn keyword sasStatement RETURN SELECT SET SKIP STARTSAS STOP TITLE 77syn keyword sasStatement UPDATE WAITSAS WHERE WINDOW X SYSTASK 78 79" Keywords that are used in Proc SQL 80" I left them as statements because SAS's enhanced editor highlights 81" them the same as normal statements used in data steps (Jim Kidd) 82 83syn keyword sasStatement ADD AND ALTER AS CASCADE CHECK CREATE 84syn keyword sasStatement DELETE DESCRIBE DISTINCT DROP FOREIGN 85syn keyword sasStatement FROM GROUP HAVING INDEX INSERT INTO IN 86syn keyword sasStatement KEY LIKE MESSAGE MODIFY MSGTYPE NOT 87syn keyword sasStatement NULL ON OR ORDER PRIMARY REFERENCES 88syn keyword sasStatement RESET RESTRICT SELECT SET TABLE 89syn keyword sasStatement UNIQUE UPDATE VALIDATE VIEW WHERE 90 91" Match declarations have to appear one per line (Paulo Tanimoto) 92syn match sasStatement "FOOTNOTE\d" 93syn match sasStatement "TITLE\d" 94 95" Match declarations have to appear one per line (Paulo Tanimoto) 96syn match sasMacro "%BQUOTE" 97syn match sasMacro "%NRBQUOTE" 98syn match sasMacro "%CMPRES" 99syn match sasMacro "%QCMPRES" 100syn match sasMacro "%COMPSTOR" 101syn match sasMacro "%DATATYP" 102syn match sasMacro "%DISPLAY" 103syn match sasMacro "%DO" 104syn match sasMacro "%ELSE" 105syn match sasMacro "%END" 106syn match sasMacro "%EVAL" 107syn match sasMacro "%GLOBAL" 108syn match sasMacro "%GOTO" 109syn match sasMacro "%IF" 110syn match sasMacro "%INDEX" 111syn match sasMacro "%INPUT" 112syn match sasMacro "%KEYDEF" 113syn match sasMacro "%LABEL" 114syn match sasMacro "%LEFT" 115syn match sasMacro "%LENGTH" 116syn match sasMacro "%LET" 117syn match sasMacro "%LOCAL" 118syn match sasMacro "%LOWCASE" 119syn match sasMacro "%MACRO" 120syn match sasMacro "%MEND" 121syn match sasMacro "%NRBQUOTE" 122syn match sasMacro "%NRQUOTE" 123syn match sasMacro "%NRSTR" 124syn match sasMacro "%PUT" 125syn match sasMacro "%QCMPRES" 126syn match sasMacro "%QLEFT" 127syn match sasMacro "%QLOWCASE" 128syn match sasMacro "%QSCAN" 129syn match sasMacro "%QSUBSTR" 130syn match sasMacro "%QSYSFUNC" 131syn match sasMacro "%QTRIM" 132syn match sasMacro "%QUOTE" 133syn match sasMacro "%QUPCASE" 134syn match sasMacro "%SCAN" 135syn match sasMacro "%STR" 136syn match sasMacro "%SUBSTR" 137syn match sasMacro "%SUPERQ" 138syn match sasMacro "%SYSCALL" 139syn match sasMacro "%SYSEVALF" 140syn match sasMacro "%SYSEXEC" 141syn match sasMacro "%SYSFUNC" 142syn match sasMacro "%SYSGET" 143syn match sasMacro "%SYSLPUT" 144syn match sasMacro "%SYSPROD" 145syn match sasMacro "%SYSRC" 146syn match sasMacro "%SYSRPUT" 147syn match sasMacro "%THEN" 148syn match sasMacro "%TO" 149syn match sasMacro "%TRIM" 150syn match sasMacro "%UNQUOTE" 151syn match sasMacro "%UNTIL" 152syn match sasMacro "%UPCASE" 153syn match sasMacro "%VERIFY" 154syn match sasMacro "%WHILE" 155syn match sasMacro "%WINDOW" 156 157" SAS Functions 158 159syn keyword sasFunction ABS ADDR AIRY ARCOS ARSIN ATAN ATTRC ATTRN 160syn keyword sasFunction BAND BETAINV BLSHIFT BNOT BOR BRSHIFT BXOR 161syn keyword sasFunction BYTE CDF CEIL CEXIST CINV CLOSE CNONCT COLLATE 162syn keyword sasFunction COMPBL COMPOUND COMPRESS COS COSH CSS CUROBS 163syn keyword sasFunction CV DACCDB DACCDBSL DACCSL DACCSYD DACCTAB 164syn keyword sasFunction DAIRY DATE DATEJUL DATEPART DATETIME DAY 165syn keyword sasFunction DCLOSE DEPDB DEPDBSL DEPDBSL DEPSL DEPSL 166syn keyword sasFunction DEPSYD DEPSYD DEPTAB DEPTAB DEQUOTE DHMS 167syn keyword sasFunction DIF DIGAMMA DIM DINFO DNUM DOPEN DOPTNAME 168syn keyword sasFunction DOPTNUM DREAD DROPNOTE DSNAME ERF ERFC EXIST 169syn keyword sasFunction EXP FAPPEND FCLOSE FCOL FDELETE FETCH FETCHOBS 170syn keyword sasFunction FEXIST FGET FILEEXIST FILENAME FILEREF FINFO 171syn keyword sasFunction FINV FIPNAME FIPNAMEL FIPSTATE FLOOR FNONCT 172syn keyword sasFunction FNOTE FOPEN FOPTNAME FOPTNUM FPOINT FPOS 173syn keyword sasFunction FPUT FREAD FREWIND FRLEN FSEP FUZZ FWRITE 174syn keyword sasFunction GAMINV GAMMA GETOPTION GETVARC GETVARN HBOUND 175syn keyword sasFunction HMS HOSTHELP HOUR IBESSEL INDEX INDEXC 176syn keyword sasFunction INDEXW INPUT INPUTC INPUTN INT INTCK INTNX 177syn keyword sasFunction INTRR IRR JBESSEL JULDATE KURTOSIS LAG LBOUND 178syn keyword sasFunction LEFT LENGTH LGAMMA LIBNAME LIBREF LOG LOG10 179syn keyword sasFunction LOG2 LOGPDF LOGPMF LOGSDF LOWCASE MAX MDY 180syn keyword sasFunction MEAN MIN MINUTE MOD MONTH MOPEN MORT N 181syn keyword sasFunction NETPV NMISS NORMAL NOTE NPV OPEN ORDINAL 182syn keyword sasFunction PATHNAME PDF PEEK PEEKC PMF POINT POISSON POKE 183syn keyword sasFunction PROBBETA PROBBNML PROBCHI PROBF PROBGAM 184syn keyword sasFunction PROBHYPR PROBIT PROBNEGB PROBNORM PROBT PUT 185syn keyword sasFunction PUTC PUTN QTR QUOTE RANBIN RANCAU RANEXP 186syn keyword sasFunction RANGAM RANGE RANK RANNOR RANPOI RANTBL RANTRI 187syn keyword sasFunction RANUNI REPEAT RESOLVE REVERSE REWIND RIGHT 188syn keyword sasFunction ROUND SAVING SCAN SDF SECOND SIGN SIN SINH 189syn keyword sasFunction SKEWNESS SOUNDEX SPEDIS SQRT STD STDERR STFIPS 190syn keyword sasFunction STNAME STNAMEL SUBSTR SUM SYMGET SYSGET SYSMSG 191syn keyword sasFunction SYSPROD SYSRC SYSTEM TAN TANH TIME TIMEPART 192syn keyword sasFunction TINV TNONCT TODAY TRANSLATE TRANWRD TRIGAMMA 193syn keyword sasFunction TRIM TRIMN TRUNC UNIFORM UPCASE USS VAR 194syn keyword sasFunction VARFMT VARINFMT VARLABEL VARLEN VARNAME 195syn keyword sasFunction VARNUM VARRAY VARRAYX VARTYPE VERIFY VFORMAT 196syn keyword sasFunction VFORMATD VFORMATDX VFORMATN VFORMATNX VFORMATW 197syn keyword sasFunction VFORMATWX VFORMATX VINARRAY VINARRAYX VINFORMAT 198syn keyword sasFunction VINFORMATD VINFORMATDX VINFORMATN VINFORMATNX 199syn keyword sasFunction VINFORMATW VINFORMATWX VINFORMATX VLABEL 200syn keyword sasFunction VLABELX VLENGTH VLENGTHX VNAME VNAMEX VTYPE 201syn keyword sasFunction VTYPEX WEEKDAY YEAR YYQ ZIPFIPS ZIPNAME ZIPNAMEL 202syn keyword sasFunction ZIPSTATE 203 204" Handy settings for using vim with log files 205syn keyword sasLogMsg NOTE 206syn keyword sasWarnMsg WARNING 207syn keyword sasErrMsg ERROR 208 209" Always contained in a comment (Bob Heckel) 210syn keyword sasTodo TODO TBD FIXME contained 211 212" These don't fit anywhere else (Bob Heckel). 213" Added others that were missing. 214syn match sasUnderscore "_ALL_" 215syn match sasUnderscore "_AUTOMATIC_" 216syn match sasUnderscore "_CHARACTER_" 217syn match sasUnderscore "_INFILE_" 218syn match sasUnderscore "_N_" 219syn match sasUnderscore "_NAME_" 220syn match sasUnderscore "_NULL_" 221syn match sasUnderscore "_NUMERIC_" 222syn match sasUnderscore "_USER_" 223syn match sasUnderscore "_WEBOUT_" 224 225" End of SAS Functions 226 227" Define the default highlighting. 228" For version 5.7 and earlier: only when not done already 229" For version 5.8 and later: only when an item doesn't have highlighting yet 230 231if version >= 508 || !exists("did_sas_syntax_inits") 232 if version < 508 233 let did_sas_syntax_inits = 1 234 command -nargs=+ HiLink hi link <args> 235 else 236 command -nargs=+ HiLink hi def link <args> 237 endif 238 239 " Default sas enhanced editor color syntax 240 hi sComment term=bold cterm=NONE ctermfg=Green ctermbg=Black gui=NONE guifg=DarkGreen guibg=White 241 hi sCard term=bold cterm=NONE ctermfg=Black ctermbg=Yellow gui=NONE guifg=Black guibg=LightYellow 242 hi sDate_Time term=NONE cterm=bold ctermfg=Green ctermbg=Black gui=bold guifg=SeaGreen guibg=White 243 hi sKeyword term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=NONE guifg=Blue guibg=White 244 hi sFmtInfmt term=NONE cterm=NONE ctermfg=LightGreen ctermbg=Black gui=NONE guifg=SeaGreen guibg=White 245 hi sString term=NONE cterm=NONE ctermfg=Magenta ctermbg=Black gui=NONE guifg=Purple guibg=White 246 hi sText term=NONE cterm=NONE ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White 247 hi sNumber term=NONE cterm=bold ctermfg=Green ctermbg=Black gui=bold guifg=SeaGreen guibg=White 248 hi sProc term=NONE cterm=bold ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White 249 hi sSection term=NONE cterm=bold ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White 250 hi mDefine term=NONE cterm=bold ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White 251 hi mKeyword term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=NONE guifg=Blue guibg=White 252 hi mReference term=NONE cterm=bold ctermfg=White ctermbg=Black gui=bold guifg=Blue guibg=White 253 hi mSection term=NONE cterm=NONE ctermfg=Blue ctermbg=Black gui=bold guifg=Navy guibg=White 254 hi mText term=NONE cterm=NONE ctermfg=White ctermbg=Black gui=bold guifg=Black guibg=White 255 256" Colors that closely match SAS log colors for default color scheme 257 hi lError term=NONE cterm=NONE ctermfg=Red ctermbg=Black gui=none guifg=Red guibg=White 258 hi lWarning term=NONE cterm=NONE ctermfg=Green ctermbg=Black gui=none guifg=Green guibg=White 259 hi lNote term=NONE cterm=NONE ctermfg=Cyan ctermbg=Black gui=none guifg=Blue guibg=White 260 261 262 " Special hilighting for the SAS proc section 263 264 HiLink sasComment sComment 265 HiLink sasConditional sKeyword 266 HiLink sasStep sSection 267 HiLink sasFunction sKeyword 268 HiLink sasMacro mKeyword 269 HiLink sasMacroVar NonText 270 HiLink sasNumber sNumber 271 HiLink sasStatement sKeyword 272 HiLink sasString sString 273 HiLink sasProc sProc 274 " (Bob Heckel) 275 HiLink sasTodo Todo 276 HiLink sasErrMsg lError 277 HiLink sasWarnMsg lWarning 278 HiLink sasLogMsg lNote 279 HiLink sasCards sCard 280 " (Bob Heckel) 281 HiLink sasUnderscore PreProc 282 delcommand HiLink 283endif 284 285" Syncronize from beginning to keep large blocks from losing 286" syntax coloring while moving through code. 287syn sync fromstart 288 289let b:current_syntax = "sas" 290 291" vim: ts=8 292