1*071d4279SBram Moolenaar" Vim syntax file 2*071d4279SBram Moolenaar" Language: Python 3*071d4279SBram Moolenaar" Maintainer: Neil Schemenauer <[email protected]> 4*071d4279SBram Moolenaar" Updated: 2002-10-18 5*071d4279SBram Moolenaar" 6*071d4279SBram Moolenaar" Options to control Python syntax highlighting: 7*071d4279SBram Moolenaar" 8*071d4279SBram Moolenaar" For highlighted numbers: 9*071d4279SBram Moolenaar" 10*071d4279SBram Moolenaar" let python_highlight_numbers = 1 11*071d4279SBram Moolenaar" 12*071d4279SBram Moolenaar" For highlighted builtin functions: 13*071d4279SBram Moolenaar" 14*071d4279SBram Moolenaar" let python_highlight_builtins = 1 15*071d4279SBram Moolenaar" 16*071d4279SBram Moolenaar" For highlighted standard exceptions: 17*071d4279SBram Moolenaar" 18*071d4279SBram Moolenaar" let python_highlight_exceptions = 1 19*071d4279SBram Moolenaar" 20*071d4279SBram Moolenaar" Highlight erroneous whitespace: 21*071d4279SBram Moolenaar" 22*071d4279SBram Moolenaar" let python_highlight_space_errors = 1 23*071d4279SBram Moolenaar" 24*071d4279SBram Moolenaar" If you want all possible Python highlighting (the same as setting the 25*071d4279SBram Moolenaar" preceding options): 26*071d4279SBram Moolenaar" 27*071d4279SBram Moolenaar" let python_highlight_all = 1 28*071d4279SBram Moolenaar" 29*071d4279SBram Moolenaar 30*071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 31*071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 32*071d4279SBram Moolenaarif version < 600 33*071d4279SBram Moolenaar syntax clear 34*071d4279SBram Moolenaarelseif exists("b:current_syntax") 35*071d4279SBram Moolenaar finish 36*071d4279SBram Moolenaarendif 37*071d4279SBram Moolenaar 38*071d4279SBram Moolenaar 39*071d4279SBram Moolenaarsyn keyword pythonStatement break continue del 40*071d4279SBram Moolenaarsyn keyword pythonStatement except exec finally 41*071d4279SBram Moolenaarsyn keyword pythonStatement pass print raise 42*071d4279SBram Moolenaarsyn keyword pythonStatement return try 43*071d4279SBram Moolenaarsyn keyword pythonStatement global assert 44*071d4279SBram Moolenaarsyn keyword pythonStatement lambda yield 45*071d4279SBram Moolenaarsyn keyword pythonStatement def class nextgroup=pythonFunction skipwhite 46*071d4279SBram Moolenaarsyn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" contained 47*071d4279SBram Moolenaarsyn keyword pythonRepeat for while 48*071d4279SBram Moolenaarsyn keyword pythonConditional if elif else 49*071d4279SBram Moolenaarsyn keyword pythonOperator and in is not or 50*071d4279SBram Moolenaarsyn keyword pythonPreCondit import from 51*071d4279SBram Moolenaarsyn match pythonComment "#.*$" contains=pythonTodo 52*071d4279SBram Moolenaarsyn keyword pythonTodo TODO FIXME XXX contained 53*071d4279SBram Moolenaar 54*071d4279SBram Moolenaar" strings 55*071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape 56*071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape 57*071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape 58*071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape 59*071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+ 60*071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+ 61*071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+ 62*071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+ 63*071d4279SBram Moolenaarsyn match pythonEscape +\\[abfnrtv'"\\]+ contained 64*071d4279SBram Moolenaarsyn match pythonEscape "\\\o\{1,3}" contained 65*071d4279SBram Moolenaarsyn match pythonEscape "\\x\x\{2}" contained 66*071d4279SBram Moolenaarsyn match pythonEscape "\(\\u\x\{4}\|\\U\x\{8}\)" contained 67*071d4279SBram Moolenaarsyn match pythonEscape "\\$" 68*071d4279SBram Moolenaar 69*071d4279SBram Moolenaarif exists("python_highlight_all") 70*071d4279SBram Moolenaar let python_highlight_numbers = 1 71*071d4279SBram Moolenaar let python_highlight_builtins = 1 72*071d4279SBram Moolenaar let python_highlight_exceptions = 1 73*071d4279SBram Moolenaar let python_highlight_space_errors = 1 74*071d4279SBram Moolenaarendif 75*071d4279SBram Moolenaar 76*071d4279SBram Moolenaarif exists("python_highlight_numbers") 77*071d4279SBram Moolenaar " numbers (including longs and complex) 78*071d4279SBram Moolenaar syn match pythonNumber "\<0x\x\+[Ll]\=\>" 79*071d4279SBram Moolenaar syn match pythonNumber "\<\d\+[LljJ]\=\>" 80*071d4279SBram Moolenaar syn match pythonNumber "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" 81*071d4279SBram Moolenaar syn match pythonNumber "\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>" 82*071d4279SBram Moolenaar syn match pythonNumber "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" 83*071d4279SBram Moolenaarendif 84*071d4279SBram Moolenaar 85*071d4279SBram Moolenaarif exists("python_highlight_builtins") 86*071d4279SBram Moolenaar " builtin functions, types and objects, not really part of the syntax 87*071d4279SBram Moolenaar syn keyword pythonBuiltin Ellipsis None NotImplemented __import__ abs 88*071d4279SBram Moolenaar syn keyword pythonBuiltin apply buffer callable chr classmethod cmp 89*071d4279SBram Moolenaar syn keyword pythonBuiltin coerce compile complex delattr dict dir divmod 90*071d4279SBram Moolenaar syn keyword pythonBuiltin eval execfile file filter float getattr globals 91*071d4279SBram Moolenaar syn keyword pythonBuiltin hasattr hash hex id input int intern isinstance 92*071d4279SBram Moolenaar syn keyword pythonBuiltin issubclass iter len list locals long map max 93*071d4279SBram Moolenaar syn keyword pythonBuiltin min object oct open ord pow property range 94*071d4279SBram Moolenaar syn keyword pythonBuiltin raw_input reduce reload repr round setattr 95*071d4279SBram Moolenaar syn keyword pythonBuiltin slice staticmethod str super tuple type unichr 96*071d4279SBram Moolenaar syn keyword pythonBuiltin unicode vars xrange zip 97*071d4279SBram Moolenaarendif 98*071d4279SBram Moolenaar 99*071d4279SBram Moolenaarif exists("python_highlight_exceptions") 100*071d4279SBram Moolenaar " builtin exceptions and warnings 101*071d4279SBram Moolenaar syn keyword pythonException ArithmeticError AssertionError AttributeError 102*071d4279SBram Moolenaar syn keyword pythonException DeprecationWarning EOFError EnvironmentError 103*071d4279SBram Moolenaar syn keyword pythonException Exception FloatingPointError IOError 104*071d4279SBram Moolenaar syn keyword pythonException ImportError IndentationError IndexError 105*071d4279SBram Moolenaar syn keyword pythonException KeyError KeyboardInterrupt LookupError 106*071d4279SBram Moolenaar syn keyword pythonException MemoryError NameError NotImplementedError 107*071d4279SBram Moolenaar syn keyword pythonException OSError OverflowError OverflowWarning 108*071d4279SBram Moolenaar syn keyword pythonException ReferenceError RuntimeError RuntimeWarning 109*071d4279SBram Moolenaar syn keyword pythonException StandardError StopIteration SyntaxError 110*071d4279SBram Moolenaar syn keyword pythonException SyntaxWarning SystemError SystemExit TabError 111*071d4279SBram Moolenaar syn keyword pythonException TypeError UnboundLocalError UnicodeError 112*071d4279SBram Moolenaar syn keyword pythonException UserWarning ValueError Warning WindowsError 113*071d4279SBram Moolenaar syn keyword pythonException ZeroDivisionError 114*071d4279SBram Moolenaarendif 115*071d4279SBram Moolenaar 116*071d4279SBram Moolenaarif exists("python_highlight_space_errors") 117*071d4279SBram Moolenaar " trailing whitespace 118*071d4279SBram Moolenaar syn match pythonSpaceError display excludenl "\S\s\+$"ms=s+1 119*071d4279SBram Moolenaar " mixed tabs and spaces 120*071d4279SBram Moolenaar syn match pythonSpaceError display " \+\t" 121*071d4279SBram Moolenaar syn match pythonSpaceError display "\t\+ " 122*071d4279SBram Moolenaarendif 123*071d4279SBram Moolenaar 124*071d4279SBram Moolenaar" This is fast but code inside triple quoted strings screws it up. It 125*071d4279SBram Moolenaar" is impossible to fix because the only way to know if you are inside a 126*071d4279SBram Moolenaar" triple quoted string is to start from the beginning of the file. If 127*071d4279SBram Moolenaar" you have a fast machine you can try uncommenting the "sync minlines" 128*071d4279SBram Moolenaar" and commenting out the rest. 129*071d4279SBram Moolenaarsyn sync match pythonSync grouphere NONE "):$" 130*071d4279SBram Moolenaarsyn sync maxlines=200 131*071d4279SBram Moolenaar"syn sync minlines=2000 132*071d4279SBram Moolenaar 133*071d4279SBram Moolenaarif version >= 508 || !exists("did_python_syn_inits") 134*071d4279SBram Moolenaar if version <= 508 135*071d4279SBram Moolenaar let did_python_syn_inits = 1 136*071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 137*071d4279SBram Moolenaar else 138*071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 139*071d4279SBram Moolenaar endif 140*071d4279SBram Moolenaar 141*071d4279SBram Moolenaar " The default methods for highlighting. Can be overridden later 142*071d4279SBram Moolenaar HiLink pythonStatement Statement 143*071d4279SBram Moolenaar HiLink pythonFunction Function 144*071d4279SBram Moolenaar HiLink pythonConditional Conditional 145*071d4279SBram Moolenaar HiLink pythonRepeat Repeat 146*071d4279SBram Moolenaar HiLink pythonString String 147*071d4279SBram Moolenaar HiLink pythonRawString String 148*071d4279SBram Moolenaar HiLink pythonEscape Special 149*071d4279SBram Moolenaar HiLink pythonOperator Operator 150*071d4279SBram Moolenaar HiLink pythonPreCondit PreCondit 151*071d4279SBram Moolenaar HiLink pythonComment Comment 152*071d4279SBram Moolenaar HiLink pythonTodo Todo 153*071d4279SBram Moolenaar if exists("python_highlight_numbers") 154*071d4279SBram Moolenaar HiLink pythonNumber Number 155*071d4279SBram Moolenaar endif 156*071d4279SBram Moolenaar if exists("python_highlight_builtins") 157*071d4279SBram Moolenaar HiLink pythonBuiltin Function 158*071d4279SBram Moolenaar endif 159*071d4279SBram Moolenaar if exists("python_highlight_exceptions") 160*071d4279SBram Moolenaar HiLink pythonException Exception 161*071d4279SBram Moolenaar endif 162*071d4279SBram Moolenaar if exists("python_highlight_space_errors") 163*071d4279SBram Moolenaar HiLink pythonSpaceError Error 164*071d4279SBram Moolenaar endif 165*071d4279SBram Moolenaar 166*071d4279SBram Moolenaar delcommand HiLink 167*071d4279SBram Moolenaarendif 168*071d4279SBram Moolenaar 169*071d4279SBram Moolenaarlet b:current_syntax = "python" 170*071d4279SBram Moolenaar 171*071d4279SBram Moolenaar" vim: ts=8 172