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