1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Python 3071d4279SBram Moolenaar" Maintainer: Neil Schemenauer <[email protected]> 4071d4279SBram Moolenaar" Updated: 2002-10-18 5071d4279SBram Moolenaar" 6071d4279SBram Moolenaar" Options to control Python syntax highlighting: 7071d4279SBram Moolenaar" 8071d4279SBram Moolenaar" For highlighted numbers: 9071d4279SBram Moolenaar" 10071d4279SBram Moolenaar" let python_highlight_numbers = 1 11071d4279SBram Moolenaar" 12071d4279SBram Moolenaar" For highlighted builtin functions: 13071d4279SBram Moolenaar" 14071d4279SBram Moolenaar" let python_highlight_builtins = 1 15071d4279SBram Moolenaar" 16071d4279SBram Moolenaar" For highlighted standard exceptions: 17071d4279SBram Moolenaar" 18071d4279SBram Moolenaar" let python_highlight_exceptions = 1 19071d4279SBram Moolenaar" 20071d4279SBram Moolenaar" Highlight erroneous whitespace: 21071d4279SBram Moolenaar" 22071d4279SBram Moolenaar" let python_highlight_space_errors = 1 23071d4279SBram Moolenaar" 24071d4279SBram Moolenaar" If you want all possible Python highlighting (the same as setting the 25071d4279SBram Moolenaar" preceding options): 26071d4279SBram Moolenaar" 27071d4279SBram Moolenaar" let python_highlight_all = 1 28071d4279SBram Moolenaar" 29071d4279SBram Moolenaar 30071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 31071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 32071d4279SBram Moolenaarif version < 600 33071d4279SBram Moolenaar syntax clear 34071d4279SBram Moolenaarelseif exists("b:current_syntax") 35071d4279SBram Moolenaar finish 36071d4279SBram Moolenaarendif 37071d4279SBram Moolenaar 38071d4279SBram Moolenaar 39071d4279SBram Moolenaarsyn keyword pythonStatement break continue del 40071d4279SBram Moolenaarsyn keyword pythonStatement except exec finally 41071d4279SBram Moolenaarsyn keyword pythonStatement pass print raise 42071d4279SBram Moolenaarsyn keyword pythonStatement return try 43071d4279SBram Moolenaarsyn keyword pythonStatement global assert 44071d4279SBram Moolenaarsyn keyword pythonStatement lambda yield 45071d4279SBram Moolenaarsyn keyword pythonStatement def class nextgroup=pythonFunction skipwhite 46071d4279SBram Moolenaarsyn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" contained 47071d4279SBram Moolenaarsyn keyword pythonRepeat for while 48071d4279SBram Moolenaarsyn keyword pythonConditional if elif else 49071d4279SBram Moolenaarsyn keyword pythonOperator and in is not or 50e2f98b95SBram Moolenaar" AS will be a keyword in Python 3 51e2f98b95SBram Moolenaarsyn keyword pythonPreCondit import from as 52071d4279SBram Moolenaarsyn match pythonComment "#.*$" contains=pythonTodo 53071d4279SBram Moolenaarsyn keyword pythonTodo TODO FIXME XXX contained 54071d4279SBram Moolenaar 55*9c102387SBram Moolenaar" Decorators (new in Python 2.4) 56*9c102387SBram Moolenaarsyn match pythonDecorator "@" display nextgroup=pythonFunction skipwhite 57*9c102387SBram Moolenaar 58071d4279SBram Moolenaar" strings 59071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape 60071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape 61071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape 62071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape 63071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+ 64071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+ 65071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+ 66071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+ 67071d4279SBram Moolenaarsyn match pythonEscape +\\[abfnrtv'"\\]+ contained 68071d4279SBram Moolenaarsyn match pythonEscape "\\\o\{1,3}" contained 69071d4279SBram Moolenaarsyn match pythonEscape "\\x\x\{2}" contained 70071d4279SBram Moolenaarsyn match pythonEscape "\(\\u\x\{4}\|\\U\x\{8}\)" contained 71071d4279SBram Moolenaarsyn match pythonEscape "\\$" 72071d4279SBram Moolenaar 73071d4279SBram Moolenaarif exists("python_highlight_all") 74071d4279SBram Moolenaar let python_highlight_numbers = 1 75071d4279SBram Moolenaar let python_highlight_builtins = 1 76071d4279SBram Moolenaar let python_highlight_exceptions = 1 77071d4279SBram Moolenaar let python_highlight_space_errors = 1 78071d4279SBram Moolenaarendif 79071d4279SBram Moolenaar 80071d4279SBram Moolenaarif exists("python_highlight_numbers") 81071d4279SBram Moolenaar " numbers (including longs and complex) 82071d4279SBram Moolenaar syn match pythonNumber "\<0x\x\+[Ll]\=\>" 83071d4279SBram Moolenaar syn match pythonNumber "\<\d\+[LljJ]\=\>" 84071d4279SBram Moolenaar syn match pythonNumber "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" 85071d4279SBram Moolenaar syn match pythonNumber "\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>" 86071d4279SBram Moolenaar syn match pythonNumber "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" 87071d4279SBram Moolenaarendif 88071d4279SBram Moolenaar 89071d4279SBram Moolenaarif exists("python_highlight_builtins") 90071d4279SBram Moolenaar " builtin functions, types and objects, not really part of the syntax 91*9c102387SBram Moolenaar syn keyword pythonBuiltin True False bool enumerate set frozenset help 92*9c102387SBram Moolenaar syn keyword pythonBuiltin reversed sorted sum 93071d4279SBram Moolenaar syn keyword pythonBuiltin Ellipsis None NotImplemented __import__ abs 94071d4279SBram Moolenaar syn keyword pythonBuiltin apply buffer callable chr classmethod cmp 95071d4279SBram Moolenaar syn keyword pythonBuiltin coerce compile complex delattr dict dir divmod 96071d4279SBram Moolenaar syn keyword pythonBuiltin eval execfile file filter float getattr globals 97071d4279SBram Moolenaar syn keyword pythonBuiltin hasattr hash hex id input int intern isinstance 98071d4279SBram Moolenaar syn keyword pythonBuiltin issubclass iter len list locals long map max 99071d4279SBram Moolenaar syn keyword pythonBuiltin min object oct open ord pow property range 100071d4279SBram Moolenaar syn keyword pythonBuiltin raw_input reduce reload repr round setattr 101071d4279SBram Moolenaar syn keyword pythonBuiltin slice staticmethod str super tuple type unichr 102071d4279SBram Moolenaar syn keyword pythonBuiltin unicode vars xrange zip 103071d4279SBram Moolenaarendif 104071d4279SBram Moolenaar 105071d4279SBram Moolenaarif exists("python_highlight_exceptions") 106071d4279SBram Moolenaar " builtin exceptions and warnings 107071d4279SBram Moolenaar syn keyword pythonException ArithmeticError AssertionError AttributeError 108071d4279SBram Moolenaar syn keyword pythonException DeprecationWarning EOFError EnvironmentError 109071d4279SBram Moolenaar syn keyword pythonException Exception FloatingPointError IOError 110071d4279SBram Moolenaar syn keyword pythonException ImportError IndentationError IndexError 111071d4279SBram Moolenaar syn keyword pythonException KeyError KeyboardInterrupt LookupError 112071d4279SBram Moolenaar syn keyword pythonException MemoryError NameError NotImplementedError 113071d4279SBram Moolenaar syn keyword pythonException OSError OverflowError OverflowWarning 114071d4279SBram Moolenaar syn keyword pythonException ReferenceError RuntimeError RuntimeWarning 115071d4279SBram Moolenaar syn keyword pythonException StandardError StopIteration SyntaxError 116071d4279SBram Moolenaar syn keyword pythonException SyntaxWarning SystemError SystemExit TabError 117071d4279SBram Moolenaar syn keyword pythonException TypeError UnboundLocalError UnicodeError 118*9c102387SBram Moolenaar syn keyword pythonException UnicodeEncodeError UnicodeDecodeError 119*9c102387SBram Moolenaar syn keyword pythonException UnicodeTranslateError 120071d4279SBram Moolenaar syn keyword pythonException UserWarning ValueError Warning WindowsError 121071d4279SBram Moolenaar syn keyword pythonException ZeroDivisionError 122071d4279SBram Moolenaarendif 123071d4279SBram Moolenaar 124071d4279SBram Moolenaarif exists("python_highlight_space_errors") 125071d4279SBram Moolenaar " trailing whitespace 126071d4279SBram Moolenaar syn match pythonSpaceError display excludenl "\S\s\+$"ms=s+1 127071d4279SBram Moolenaar " mixed tabs and spaces 128071d4279SBram Moolenaar syn match pythonSpaceError display " \+\t" 129071d4279SBram Moolenaar syn match pythonSpaceError display "\t\+ " 130071d4279SBram Moolenaarendif 131071d4279SBram Moolenaar 132071d4279SBram Moolenaar" This is fast but code inside triple quoted strings screws it up. It 133071d4279SBram Moolenaar" is impossible to fix because the only way to know if you are inside a 134071d4279SBram Moolenaar" triple quoted string is to start from the beginning of the file. If 135071d4279SBram Moolenaar" you have a fast machine you can try uncommenting the "sync minlines" 136071d4279SBram Moolenaar" and commenting out the rest. 137071d4279SBram Moolenaarsyn sync match pythonSync grouphere NONE "):$" 138071d4279SBram Moolenaarsyn sync maxlines=200 139071d4279SBram Moolenaar"syn sync minlines=2000 140071d4279SBram Moolenaar 141071d4279SBram Moolenaarif version >= 508 || !exists("did_python_syn_inits") 142071d4279SBram Moolenaar if version <= 508 143071d4279SBram Moolenaar let did_python_syn_inits = 1 144071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 145071d4279SBram Moolenaar else 146071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 147071d4279SBram Moolenaar endif 148071d4279SBram Moolenaar 149071d4279SBram Moolenaar " The default methods for highlighting. Can be overridden later 150071d4279SBram Moolenaar HiLink pythonStatement Statement 151071d4279SBram Moolenaar HiLink pythonFunction Function 152071d4279SBram Moolenaar HiLink pythonConditional Conditional 153071d4279SBram Moolenaar HiLink pythonRepeat Repeat 154071d4279SBram Moolenaar HiLink pythonString String 155071d4279SBram Moolenaar HiLink pythonRawString String 156071d4279SBram Moolenaar HiLink pythonEscape Special 157071d4279SBram Moolenaar HiLink pythonOperator Operator 158071d4279SBram Moolenaar HiLink pythonPreCondit PreCondit 159071d4279SBram Moolenaar HiLink pythonComment Comment 160071d4279SBram Moolenaar HiLink pythonTodo Todo 161*9c102387SBram Moolenaar HiLink pythonDecorator Define 162071d4279SBram Moolenaar if exists("python_highlight_numbers") 163071d4279SBram Moolenaar HiLink pythonNumber Number 164071d4279SBram Moolenaar endif 165071d4279SBram Moolenaar if exists("python_highlight_builtins") 166071d4279SBram Moolenaar HiLink pythonBuiltin Function 167071d4279SBram Moolenaar endif 168071d4279SBram Moolenaar if exists("python_highlight_exceptions") 169071d4279SBram Moolenaar HiLink pythonException Exception 170071d4279SBram Moolenaar endif 171071d4279SBram Moolenaar if exists("python_highlight_space_errors") 172071d4279SBram Moolenaar HiLink pythonSpaceError Error 173071d4279SBram Moolenaar endif 174071d4279SBram Moolenaar 175071d4279SBram Moolenaar delcommand HiLink 176071d4279SBram Moolenaarendif 177071d4279SBram Moolenaar 178071d4279SBram Moolenaarlet b:current_syntax = "python" 179071d4279SBram Moolenaar 180071d4279SBram Moolenaar" vim: ts=8 181