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 50*e2f98b95SBram Moolenaar" AS will be a keyword in Python 3 51*e2f98b95SBram Moolenaarsyn keyword pythonPreCondit import from as 52071d4279SBram Moolenaarsyn match pythonComment "#.*$" contains=pythonTodo 53071d4279SBram Moolenaarsyn keyword pythonTodo TODO FIXME XXX contained 54071d4279SBram Moolenaar 55071d4279SBram Moolenaar" strings 56071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape 57071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape 58071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape 59071d4279SBram Moolenaarsyn region pythonString matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape 60071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+ 61071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+ 62071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+ 63071d4279SBram Moolenaarsyn region pythonRawString matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+ 64071d4279SBram Moolenaarsyn match pythonEscape +\\[abfnrtv'"\\]+ contained 65071d4279SBram Moolenaarsyn match pythonEscape "\\\o\{1,3}" contained 66071d4279SBram Moolenaarsyn match pythonEscape "\\x\x\{2}" contained 67071d4279SBram Moolenaarsyn match pythonEscape "\(\\u\x\{4}\|\\U\x\{8}\)" contained 68071d4279SBram Moolenaarsyn match pythonEscape "\\$" 69071d4279SBram Moolenaar 70071d4279SBram Moolenaarif exists("python_highlight_all") 71071d4279SBram Moolenaar let python_highlight_numbers = 1 72071d4279SBram Moolenaar let python_highlight_builtins = 1 73071d4279SBram Moolenaar let python_highlight_exceptions = 1 74071d4279SBram Moolenaar let python_highlight_space_errors = 1 75071d4279SBram Moolenaarendif 76071d4279SBram Moolenaar 77071d4279SBram Moolenaarif exists("python_highlight_numbers") 78071d4279SBram Moolenaar " numbers (including longs and complex) 79071d4279SBram Moolenaar syn match pythonNumber "\<0x\x\+[Ll]\=\>" 80071d4279SBram Moolenaar syn match pythonNumber "\<\d\+[LljJ]\=\>" 81071d4279SBram Moolenaar syn match pythonNumber "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" 82071d4279SBram Moolenaar syn match pythonNumber "\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>" 83071d4279SBram Moolenaar syn match pythonNumber "\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" 84071d4279SBram Moolenaarendif 85071d4279SBram Moolenaar 86071d4279SBram Moolenaarif exists("python_highlight_builtins") 87071d4279SBram Moolenaar " builtin functions, types and objects, not really part of the syntax 88071d4279SBram Moolenaar syn keyword pythonBuiltin Ellipsis None NotImplemented __import__ abs 89071d4279SBram Moolenaar syn keyword pythonBuiltin apply buffer callable chr classmethod cmp 90071d4279SBram Moolenaar syn keyword pythonBuiltin coerce compile complex delattr dict dir divmod 91071d4279SBram Moolenaar syn keyword pythonBuiltin eval execfile file filter float getattr globals 92071d4279SBram Moolenaar syn keyword pythonBuiltin hasattr hash hex id input int intern isinstance 93071d4279SBram Moolenaar syn keyword pythonBuiltin issubclass iter len list locals long map max 94071d4279SBram Moolenaar syn keyword pythonBuiltin min object oct open ord pow property range 95071d4279SBram Moolenaar syn keyword pythonBuiltin raw_input reduce reload repr round setattr 96071d4279SBram Moolenaar syn keyword pythonBuiltin slice staticmethod str super tuple type unichr 97071d4279SBram Moolenaar syn keyword pythonBuiltin unicode vars xrange zip 98071d4279SBram Moolenaarendif 99071d4279SBram Moolenaar 100071d4279SBram Moolenaarif exists("python_highlight_exceptions") 101071d4279SBram Moolenaar " builtin exceptions and warnings 102071d4279SBram Moolenaar syn keyword pythonException ArithmeticError AssertionError AttributeError 103071d4279SBram Moolenaar syn keyword pythonException DeprecationWarning EOFError EnvironmentError 104071d4279SBram Moolenaar syn keyword pythonException Exception FloatingPointError IOError 105071d4279SBram Moolenaar syn keyword pythonException ImportError IndentationError IndexError 106071d4279SBram Moolenaar syn keyword pythonException KeyError KeyboardInterrupt LookupError 107071d4279SBram Moolenaar syn keyword pythonException MemoryError NameError NotImplementedError 108071d4279SBram Moolenaar syn keyword pythonException OSError OverflowError OverflowWarning 109071d4279SBram Moolenaar syn keyword pythonException ReferenceError RuntimeError RuntimeWarning 110071d4279SBram Moolenaar syn keyword pythonException StandardError StopIteration SyntaxError 111071d4279SBram Moolenaar syn keyword pythonException SyntaxWarning SystemError SystemExit TabError 112071d4279SBram Moolenaar syn keyword pythonException TypeError UnboundLocalError UnicodeError 113071d4279SBram Moolenaar syn keyword pythonException UserWarning ValueError Warning WindowsError 114071d4279SBram Moolenaar syn keyword pythonException ZeroDivisionError 115071d4279SBram Moolenaarendif 116071d4279SBram Moolenaar 117071d4279SBram Moolenaarif exists("python_highlight_space_errors") 118071d4279SBram Moolenaar " trailing whitespace 119071d4279SBram Moolenaar syn match pythonSpaceError display excludenl "\S\s\+$"ms=s+1 120071d4279SBram Moolenaar " mixed tabs and spaces 121071d4279SBram Moolenaar syn match pythonSpaceError display " \+\t" 122071d4279SBram Moolenaar syn match pythonSpaceError display "\t\+ " 123071d4279SBram Moolenaarendif 124071d4279SBram Moolenaar 125071d4279SBram Moolenaar" This is fast but code inside triple quoted strings screws it up. It 126071d4279SBram Moolenaar" is impossible to fix because the only way to know if you are inside a 127071d4279SBram Moolenaar" triple quoted string is to start from the beginning of the file. If 128071d4279SBram Moolenaar" you have a fast machine you can try uncommenting the "sync minlines" 129071d4279SBram Moolenaar" and commenting out the rest. 130071d4279SBram Moolenaarsyn sync match pythonSync grouphere NONE "):$" 131071d4279SBram Moolenaarsyn sync maxlines=200 132071d4279SBram Moolenaar"syn sync minlines=2000 133071d4279SBram Moolenaar 134071d4279SBram Moolenaarif version >= 508 || !exists("did_python_syn_inits") 135071d4279SBram Moolenaar if version <= 508 136071d4279SBram Moolenaar let did_python_syn_inits = 1 137071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 138071d4279SBram Moolenaar else 139071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 140071d4279SBram Moolenaar endif 141071d4279SBram Moolenaar 142071d4279SBram Moolenaar " The default methods for highlighting. Can be overridden later 143071d4279SBram Moolenaar HiLink pythonStatement Statement 144071d4279SBram Moolenaar HiLink pythonFunction Function 145071d4279SBram Moolenaar HiLink pythonConditional Conditional 146071d4279SBram Moolenaar HiLink pythonRepeat Repeat 147071d4279SBram Moolenaar HiLink pythonString String 148071d4279SBram Moolenaar HiLink pythonRawString String 149071d4279SBram Moolenaar HiLink pythonEscape Special 150071d4279SBram Moolenaar HiLink pythonOperator Operator 151071d4279SBram Moolenaar HiLink pythonPreCondit PreCondit 152071d4279SBram Moolenaar HiLink pythonComment Comment 153071d4279SBram Moolenaar HiLink pythonTodo Todo 154071d4279SBram Moolenaar if exists("python_highlight_numbers") 155071d4279SBram Moolenaar HiLink pythonNumber Number 156071d4279SBram Moolenaar endif 157071d4279SBram Moolenaar if exists("python_highlight_builtins") 158071d4279SBram Moolenaar HiLink pythonBuiltin Function 159071d4279SBram Moolenaar endif 160071d4279SBram Moolenaar if exists("python_highlight_exceptions") 161071d4279SBram Moolenaar HiLink pythonException Exception 162071d4279SBram Moolenaar endif 163071d4279SBram Moolenaar if exists("python_highlight_space_errors") 164071d4279SBram Moolenaar HiLink pythonSpaceError Error 165071d4279SBram Moolenaar endif 166071d4279SBram Moolenaar 167071d4279SBram Moolenaar delcommand HiLink 168071d4279SBram Moolenaarendif 169071d4279SBram Moolenaar 170071d4279SBram Moolenaarlet b:current_syntax = "python" 171071d4279SBram Moolenaar 172071d4279SBram Moolenaar" vim: ts=8 173