xref: /vim-8.2.3635/runtime/syntax/python.vim (revision f37506f6)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	Python
3541f92d6SBram Moolenaar" Maintainer:	Zvezdan Petkovic <[email protected]>
4e4a3bcf2SBram Moolenaar" Last Change:	2016 Aug 14
5541f92d6SBram Moolenaar" Credits:	Neil Schemenauer <[email protected]>
65c73622aSBram Moolenaar"		Dmitry Vasiliev
7071d4279SBram Moolenaar"
85c73622aSBram Moolenaar"		This version is a major rewrite by Zvezdan Petkovic.
9071d4279SBram Moolenaar"
105c73622aSBram Moolenaar"		- introduced highlighting of doctests
115c73622aSBram Moolenaar"		- updated keywords, built-ins, and exceptions
125c73622aSBram Moolenaar"		- corrected regular expressions for
13071d4279SBram Moolenaar"
145c73622aSBram Moolenaar"		  * functions
155c73622aSBram Moolenaar"		  * decorators
165c73622aSBram Moolenaar"		  * strings
175c73622aSBram Moolenaar"		  * escapes
185c73622aSBram Moolenaar"		  * numbers
195c73622aSBram Moolenaar"		  * space error
20071d4279SBram Moolenaar"
215c73622aSBram Moolenaar"		- corrected synchronization
225c73622aSBram Moolenaar"		- more highlighting is ON by default, except
235c73622aSBram Moolenaar"		- space error highlighting is OFF by default
24071d4279SBram Moolenaar"
255c73622aSBram Moolenaar" Optional highlighting can be controlled using these variables.
26071d4279SBram Moolenaar"
275c73622aSBram Moolenaar"   let python_no_builtin_highlight = 1
285c73622aSBram Moolenaar"   let python_no_doctest_code_highlight = 1
295c73622aSBram Moolenaar"   let python_no_doctest_highlight = 1
305c73622aSBram Moolenaar"   let python_no_exception_highlight = 1
315c73622aSBram Moolenaar"   let python_no_number_highlight = 1
325c73622aSBram Moolenaar"   let python_space_error_highlight = 1
33071d4279SBram Moolenaar"
345c73622aSBram Moolenaar" All the options above can be switched on together.
35071d4279SBram Moolenaar"
36071d4279SBram Moolenaar"   let python_highlight_all = 1
37071d4279SBram Moolenaar"
38071d4279SBram Moolenaar
3989bcfda6SBram Moolenaar" quit when a syntax file was already loaded.
4089bcfda6SBram Moolenaarif exists("b:current_syntax")
41071d4279SBram Moolenaar  finish
42071d4279SBram Moolenaarendif
43071d4279SBram Moolenaar
4400659069SBram Moolenaar" We need nocompatible mode in order to continue lines with backslashes.
4500659069SBram Moolenaar" Original setting will be restored.
4600659069SBram Moolenaarlet s:cpo_save = &cpo
4700659069SBram Moolenaarset cpo&vim
4800659069SBram Moolenaar
495c73622aSBram Moolenaar" Keep Python keywords in alphabetical order inside groups for easy
505c73622aSBram Moolenaar" comparison with the table in the 'Python Language Reference'
51f9132810SBram Moolenaar" https://docs.python.org/2/reference/lexical_analysis.html#keywords,
52f9132810SBram Moolenaar" https://docs.python.org/3/reference/lexical_analysis.html#keywords.
535c73622aSBram Moolenaar" Groups are in the order presented in NAMING CONVENTIONS in syntax.txt.
545c73622aSBram Moolenaar" Exceptions come last at the end of each group (class and def below).
555c73622aSBram Moolenaar"
565c73622aSBram Moolenaar" Keywords 'with' and 'as' are new in Python 2.6
575c73622aSBram Moolenaar" (use 'from __future__ import with_statement' in Python 2.5).
585c73622aSBram Moolenaar"
59f9132810SBram Moolenaar" Some compromises had to be made to support both Python 3 and 2.
60f9132810SBram Moolenaar" We include Python 3 features, but when a definition is duplicated,
615c73622aSBram Moolenaar" the last definition takes precedence.
625c73622aSBram Moolenaar"
63f9132810SBram Moolenaar" - 'False', 'None', and 'True' are keywords in Python 3 but they are
64f9132810SBram Moolenaar"   built-ins in 2 and will be highlighted as built-ins below.
65f9132810SBram Moolenaar" - 'exec' is a built-in in Python 3 and will be highlighted as
665c73622aSBram Moolenaar"   built-in below.
67f9132810SBram Moolenaar" - 'nonlocal' is a keyword in Python 3 and will be highlighted.
68f9132810SBram Moolenaar" - 'print' is a built-in in Python 3 and will be highlighted as
69f9132810SBram Moolenaar"   built-in below (use 'from __future__ import print_function' in 2)
70ca63501fSBram Moolenaar" - async and await were added in Python 3.5 and are soft keywords.
715c73622aSBram Moolenaar"
726f1d9a09SBram Moolenaarsyn keyword pythonStatement	False None True
735c73622aSBram Moolenaarsyn keyword pythonStatement	as assert break continue del exec global
745c73622aSBram Moolenaarsyn keyword pythonStatement	lambda nonlocal pass print return with yield
755c73622aSBram Moolenaarsyn keyword pythonStatement	class def nextgroup=pythonFunction skipwhite
765c73622aSBram Moolenaarsyn keyword pythonConditional	elif else if
77071d4279SBram Moolenaarsyn keyword pythonRepeat	for while
78071d4279SBram Moolenaarsyn keyword pythonOperator	and in is not or
795c73622aSBram Moolenaarsyn keyword pythonException	except finally raise try
805c73622aSBram Moolenaarsyn keyword pythonInclude	from import
81ca63501fSBram Moolenaarsyn keyword pythonAsync		async await
82071d4279SBram Moolenaar
839c102387SBram Moolenaar" Decorators (new in Python 2.4)
84e4a3bcf2SBram Moolenaar" Python 3.5 introduced the use of the same symbol for matrix
85e4a3bcf2SBram Moolenaar" multiplication.  We now have to exclude the symbol from being
86e4a3bcf2SBram Moolenaar" highlighted when used in that context. Hence, the check that it's
87e4a3bcf2SBram Moolenaar" preceded by empty space only (possibly in a docstring/doctest) and
88e4a3bcf2SBram Moolenaar" followed by decorator name, optional parenthesized list of arguments,
89e4a3bcf2SBram Moolenaar" and the next line with either def, class, or another decorator.
90e4a3bcf2SBram Moolenaarsyn match   pythonDecorator
91e4a3bcf2SBram Moolenaar  \ "\%(\%(^\s*\)\%(\%(>>>\|\.\.\.\)\s\+\)\=\)\zs@\%(\s*\h\%(\w\|\.\)*\%(([^)]*)\)\=\s*\n\s*\%(\.\.\.\s\+\)\=\%(@\s*\h\|\%(def\|class\)\s\+\)\)\@="
92e4a3bcf2SBram Moolenaar  \ display nextgroup=pythonDecoratorName skipwhite
93e4a3bcf2SBram Moolenaar
945c73622aSBram Moolenaar" A dot must be allowed because of @MyClass.myfunc decorators.
95e4a3bcf2SBram Moolenaar" It must be preceded by a decorator symbol and on a separate line from
96e4a3bcf2SBram Moolenaar" a function/class it decorates.
97e4a3bcf2SBram Moolenaarsyn match   pythonDecoratorName
98e4a3bcf2SBram Moolenaar  \ "\%(@\s*\)\@<=\h\%(\w\|\.\)*\%(\%(([^)]*)\)\=\s*\n\)\@="
99e4a3bcf2SBram Moolenaar  \ contained display nextgroup=pythonFunction skipnl
100e4a3bcf2SBram Moolenaar
101e4a3bcf2SBram Moolenaar" The zero-length non-grouping match of def or class before the function
102e4a3bcf2SBram Moolenaar" name is extremely important in pythonFunction.  Without it, everything
103e4a3bcf2SBram Moolenaar" is interpreted as a function inside the contained environment of
104e4a3bcf2SBram Moolenaar" doctests.
1055c73622aSBram Moolenaarsyn match   pythonFunction
106e4a3bcf2SBram Moolenaar  \ "\%(\%(^\s*\)\%(\%(>>>\|\.\.\.\)\s\+\)\=\%(def\|class\)\s\+\)\@<=\h\w*"
107e4a3bcf2SBram Moolenaar  \ contained
1089c102387SBram Moolenaar
1095c73622aSBram Moolenaarsyn match   pythonComment	"#.*$" contains=pythonTodo,@Spell
1105c73622aSBram Moolenaarsyn keyword pythonTodo		FIXME NOTE NOTES TODO XXX contained
1115c73622aSBram Moolenaar
1125c73622aSBram Moolenaar" Triple-quoted strings can contain doctests.
113541f92d6SBram Moolenaarsyn region  pythonString matchgroup=pythonQuotes
1145c73622aSBram Moolenaar      \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
1155c73622aSBram Moolenaar      \ contains=pythonEscape,@Spell
116541f92d6SBram Moolenaarsyn region  pythonString matchgroup=pythonTripleQuotes
1175c73622aSBram Moolenaar      \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
1185c73622aSBram Moolenaar      \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell
119541f92d6SBram Moolenaarsyn region  pythonRawString matchgroup=pythonQuotes
1205c73622aSBram Moolenaar      \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
1215c73622aSBram Moolenaar      \ contains=@Spell
122541f92d6SBram Moolenaarsyn region  pythonRawString matchgroup=pythonTripleQuotes
1235c73622aSBram Moolenaar      \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
1245c73622aSBram Moolenaar      \ contains=pythonSpaceError,pythonDoctest,@Spell
1255c73622aSBram Moolenaar
126071d4279SBram Moolenaarsyn match   pythonEscape	+\\[abfnrtv'"\\]+ contained
127071d4279SBram Moolenaarsyn match   pythonEscape	"\\\o\{1,3}" contained
128071d4279SBram Moolenaarsyn match   pythonEscape	"\\x\x\{2}" contained
1295c73622aSBram Moolenaarsyn match   pythonEscape	"\%(\\u\x\{4}\|\\U\x\{8}\)" contained
1305c73622aSBram Moolenaar" Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
131541f92d6SBram Moolenaarsyn match   pythonEscape	"\\N{\a\+\%(\s\a\+\)*}" contained
132071d4279SBram Moolenaarsyn match   pythonEscape	"\\$"
133071d4279SBram Moolenaar
134071d4279SBram Moolenaarif exists("python_highlight_all")
1355c73622aSBram Moolenaar  if exists("python_no_builtin_highlight")
1365c73622aSBram Moolenaar    unlet python_no_builtin_highlight
1375c73622aSBram Moolenaar  endif
1385c73622aSBram Moolenaar  if exists("python_no_doctest_code_highlight")
1395c73622aSBram Moolenaar    unlet python_no_doctest_code_highlight
1405c73622aSBram Moolenaar  endif
1415c73622aSBram Moolenaar  if exists("python_no_doctest_highlight")
1425c73622aSBram Moolenaar    unlet python_no_doctest_highlight
1435c73622aSBram Moolenaar  endif
1445c73622aSBram Moolenaar  if exists("python_no_exception_highlight")
1455c73622aSBram Moolenaar    unlet python_no_exception_highlight
1465c73622aSBram Moolenaar  endif
1475c73622aSBram Moolenaar  if exists("python_no_number_highlight")
1485c73622aSBram Moolenaar    unlet python_no_number_highlight
1495c73622aSBram Moolenaar  endif
1505c73622aSBram Moolenaar  let python_space_error_highlight = 1
151071d4279SBram Moolenaarendif
152071d4279SBram Moolenaar
1535c73622aSBram Moolenaar" It is very important to understand all details before changing the
1545c73622aSBram Moolenaar" regular expressions below or their order.
1555c73622aSBram Moolenaar" The word boundaries are *not* the floating-point number boundaries
1565c73622aSBram Moolenaar" because of a possible leading or trailing decimal point.
1575c73622aSBram Moolenaar" The expressions below ensure that all valid number literals are
1585c73622aSBram Moolenaar" highlighted, and invalid number literals are not.  For example,
1595c73622aSBram Moolenaar"
1605c73622aSBram Moolenaar" - a decimal point in '4.' at the end of a line is highlighted,
1615c73622aSBram Moolenaar" - a second dot in 1.0.0 is not highlighted,
1625c73622aSBram Moolenaar" - 08 is not highlighted,
1635c73622aSBram Moolenaar" - 08e0 or 08j are highlighted,
1645c73622aSBram Moolenaar"
1655c73622aSBram Moolenaar" and so on, as specified in the 'Python Language Reference'.
166f9132810SBram Moolenaar" https://docs.python.org/2/reference/lexical_analysis.html#numeric-literals
167f9132810SBram Moolenaar" https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals
1685c73622aSBram Moolenaarif !exists("python_no_number_highlight")
169071d4279SBram Moolenaar  " numbers (including longs and complex)
1705c73622aSBram Moolenaar  syn match   pythonNumber	"\<0[oO]\=\o\+[Ll]\=\>"
1715c73622aSBram Moolenaar  syn match   pythonNumber	"\<0[xX]\x\+[Ll]\=\>"
1725c73622aSBram Moolenaar  syn match   pythonNumber	"\<0[bB][01]\+[Ll]\=\>"
1735c73622aSBram Moolenaar  syn match   pythonNumber	"\<\%([1-9]\d*\|0\)[Ll]\=\>"
1745c73622aSBram Moolenaar  syn match   pythonNumber	"\<\d\+[jJ]\>"
1755c73622aSBram Moolenaar  syn match   pythonNumber	"\<\d\+[eE][+-]\=\d\+[jJ]\=\>"
1765c73622aSBram Moolenaar  syn match   pythonNumber
1775c73622aSBram Moolenaar	\ "\<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@="
1785c73622aSBram Moolenaar  syn match   pythonNumber
179f9132810SBram Moolenaar	\ "\%(^\|\W\)\zs\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>"
180071d4279SBram Moolenaarendif
181071d4279SBram Moolenaar
1825c73622aSBram Moolenaar" Group the built-ins in the order in the 'Python Library Reference' for
1835c73622aSBram Moolenaar" easier comparison.
184f9132810SBram Moolenaar" https://docs.python.org/2/library/constants.html
185f9132810SBram Moolenaar" https://docs.python.org/3/library/constants.html
186f9132810SBram Moolenaar" http://docs.python.org/2/library/functions.html
187f9132810SBram Moolenaar" http://docs.python.org/3/library/functions.html
188f9132810SBram Moolenaar" http://docs.python.org/2/library/functions.html#non-essential-built-in-functions
189f9132810SBram Moolenaar" http://docs.python.org/3/library/functions.html#non-essential-built-in-functions
1905c73622aSBram Moolenaar" Python built-in functions are in alphabetical order.
1915c73622aSBram Moolenaarif !exists("python_no_builtin_highlight")
1925c73622aSBram Moolenaar  " built-in constants
193f9132810SBram Moolenaar  " 'False', 'True', and 'None' are also reserved words in Python 3
1945c73622aSBram Moolenaar  syn keyword pythonBuiltin	False True None
1955c73622aSBram Moolenaar  syn keyword pythonBuiltin	NotImplemented Ellipsis __debug__
1965c73622aSBram Moolenaar  " built-in functions
197f9132810SBram Moolenaar  syn keyword pythonBuiltin	abs all any bin bool bytearray callable chr
198f9132810SBram Moolenaar  syn keyword pythonBuiltin	classmethod compile complex delattr dict dir
199f9132810SBram Moolenaar  syn keyword pythonBuiltin	divmod enumerate eval filter float format
2005c73622aSBram Moolenaar  syn keyword pythonBuiltin	frozenset getattr globals hasattr hash
2015c73622aSBram Moolenaar  syn keyword pythonBuiltin	help hex id input int isinstance
2025c73622aSBram Moolenaar  syn keyword pythonBuiltin	issubclass iter len list locals map max
203f9132810SBram Moolenaar  syn keyword pythonBuiltin	memoryview min next object oct open ord pow
204f9132810SBram Moolenaar  syn keyword pythonBuiltin	print property range repr reversed round set
2055c73622aSBram Moolenaar  syn keyword pythonBuiltin	setattr slice sorted staticmethod str
2065c73622aSBram Moolenaar  syn keyword pythonBuiltin	sum super tuple type vars zip __import__
207f9132810SBram Moolenaar  " Python 2 only
208f9132810SBram Moolenaar  syn keyword pythonBuiltin	basestring cmp execfile file
2095c73622aSBram Moolenaar  syn keyword pythonBuiltin	long raw_input reduce reload unichr
2105c73622aSBram Moolenaar  syn keyword pythonBuiltin	unicode xrange
211f9132810SBram Moolenaar  " Python 3 only
212f9132810SBram Moolenaar  syn keyword pythonBuiltin	ascii bytes exec
213f9132810SBram Moolenaar  " non-essential built-in functions; Python 2 only
2145c73622aSBram Moolenaar  syn keyword pythonBuiltin	apply buffer coerce intern
21577cdfd10SBram Moolenaar  " avoid highlighting attributes as builtins
21677cdfd10SBram Moolenaar  syn match   pythonAttribute	/\.\h\w*/hs=s+1 contains=ALLBUT,pythonBuiltin transparent
217071d4279SBram Moolenaarendif
218071d4279SBram Moolenaar
2195c73622aSBram Moolenaar" From the 'Python Library Reference' class hierarchy at the bottom.
220f9132810SBram Moolenaar" http://docs.python.org/2/library/exceptions.html
221f9132810SBram Moolenaar" http://docs.python.org/3/library/exceptions.html
2225c73622aSBram Moolenaarif !exists("python_no_exception_highlight")
223f9132810SBram Moolenaar  " builtin base exceptions (used mostly as base classes for other exceptions)
2245c73622aSBram Moolenaar  syn keyword pythonExceptions	BaseException Exception
225f9132810SBram Moolenaar  syn keyword pythonExceptions	ArithmeticError BufferError
2265c73622aSBram Moolenaar  syn keyword pythonExceptions	LookupError
227f9132810SBram Moolenaar  " builtin base exceptions removed in Python 3
228f9132810SBram Moolenaar  syn keyword pythonExceptions	EnvironmentError StandardError
2295c73622aSBram Moolenaar  " builtin exceptions (actually raised)
230f9132810SBram Moolenaar  syn keyword pythonExceptions	AssertionError AttributeError
2315c73622aSBram Moolenaar  syn keyword pythonExceptions	EOFError FloatingPointError GeneratorExit
232f9132810SBram Moolenaar  syn keyword pythonExceptions	ImportError IndentationError
2335c73622aSBram Moolenaar  syn keyword pythonExceptions	IndexError KeyError KeyboardInterrupt
2345c73622aSBram Moolenaar  syn keyword pythonExceptions	MemoryError NameError NotImplementedError
2355c73622aSBram Moolenaar  syn keyword pythonExceptions	OSError OverflowError ReferenceError
2365c73622aSBram Moolenaar  syn keyword pythonExceptions	RuntimeError StopIteration SyntaxError
2375c73622aSBram Moolenaar  syn keyword pythonExceptions	SystemError SystemExit TabError TypeError
2385c73622aSBram Moolenaar  syn keyword pythonExceptions	UnboundLocalError UnicodeError
2395c73622aSBram Moolenaar  syn keyword pythonExceptions	UnicodeDecodeError UnicodeEncodeError
240f9132810SBram Moolenaar  syn keyword pythonExceptions	UnicodeTranslateError ValueError
241f9132810SBram Moolenaar  syn keyword pythonExceptions	ZeroDivisionError
242f9132810SBram Moolenaar  " builtin OS exceptions in Python 3
243f9132810SBram Moolenaar  syn keyword pythonExceptions	BlockingIOError BrokenPipeError
244f9132810SBram Moolenaar  syn keyword pythonExceptions	ChildProcessError ConnectionAbortedError
245f9132810SBram Moolenaar  syn keyword pythonExceptions	ConnectionError ConnectionRefusedError
246f9132810SBram Moolenaar  syn keyword pythonExceptions	ConnectionResetError FileExistsError
247f9132810SBram Moolenaar  syn keyword pythonExceptions	FileNotFoundError InterruptedError
248f9132810SBram Moolenaar  syn keyword pythonExceptions	IsADirectoryError NotADirectoryError
249f9132810SBram Moolenaar  syn keyword pythonExceptions	PermissionError ProcessLookupError
250ca63501fSBram Moolenaar  syn keyword pythonExceptions	RecursionError StopAsyncIteration
251f9132810SBram Moolenaar  syn keyword pythonExceptions	TimeoutError
252f9132810SBram Moolenaar  " builtin exceptions deprecated/removed in Python 3
253f9132810SBram Moolenaar  syn keyword pythonExceptions	IOError VMSError WindowsError
2545c73622aSBram Moolenaar  " builtin warnings
2555c73622aSBram Moolenaar  syn keyword pythonExceptions	BytesWarning DeprecationWarning FutureWarning
2565c73622aSBram Moolenaar  syn keyword pythonExceptions	ImportWarning PendingDeprecationWarning
2575c73622aSBram Moolenaar  syn keyword pythonExceptions	RuntimeWarning SyntaxWarning UnicodeWarning
2585c73622aSBram Moolenaar  syn keyword pythonExceptions	UserWarning Warning
259f9132810SBram Moolenaar  " builtin warnings in Python 3
260f9132810SBram Moolenaar  syn keyword pythonExceptions	ResourceWarning
261071d4279SBram Moolenaarendif
262071d4279SBram Moolenaar
2635c73622aSBram Moolenaarif exists("python_space_error_highlight")
264071d4279SBram Moolenaar  " trailing whitespace
2655c73622aSBram Moolenaar  syn match   pythonSpaceError	display excludenl "\s\+$"
266071d4279SBram Moolenaar  " mixed tabs and spaces
267071d4279SBram Moolenaar  syn match   pythonSpaceError	display " \+\t"
268071d4279SBram Moolenaar  syn match   pythonSpaceError	display "\t\+ "
269071d4279SBram Moolenaarendif
270071d4279SBram Moolenaar
2715c73622aSBram Moolenaar" Do not spell doctests inside strings.
2725c73622aSBram Moolenaar" Notice that the end of a string, either ''', or """, will end the contained
2735c73622aSBram Moolenaar" doctest too.  Thus, we do *not* need to have it as an end pattern.
2745c73622aSBram Moolenaarif !exists("python_no_doctest_highlight")
27534700a6aSBram Moolenaar  if !exists("python_no_doctest_code_highlight")
2765c73622aSBram Moolenaar    syn region pythonDoctest
2775c73622aSBram Moolenaar	  \ start="^\s*>>>\s" end="^\s*$"
2785c73622aSBram Moolenaar	  \ contained contains=ALLBUT,pythonDoctest,@Spell
2795c73622aSBram Moolenaar    syn region pythonDoctestValue
2805c73622aSBram Moolenaar	  \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
2815c73622aSBram Moolenaar	  \ contained
2825c73622aSBram Moolenaar  else
2835c73622aSBram Moolenaar    syn region pythonDoctest
2845c73622aSBram Moolenaar	  \ start="^\s*>>>" end="^\s*$"
2855c73622aSBram Moolenaar	  \ contained contains=@NoSpell
2865c73622aSBram Moolenaar  endif
2875c73622aSBram Moolenaarendif
2885c73622aSBram Moolenaar
2895c73622aSBram Moolenaar" Sync at the beginning of class, function, or method definition.
2905c73622aSBram Moolenaarsyn sync match pythonSync grouphere NONE "^\s*\%(def\|class\)\s\+\h\w*\s*("
291071d4279SBram Moolenaar
292071d4279SBram Moolenaar
2935c73622aSBram Moolenaar" The default highlight links.  Can be overridden later.
294*f37506f6SBram Moolenaarhi def link pythonStatement	Statement
295*f37506f6SBram Moolenaarhi def link pythonConditional	Conditional
296*f37506f6SBram Moolenaarhi def link pythonRepeat		Repeat
297*f37506f6SBram Moolenaarhi def link pythonOperator		Operator
298*f37506f6SBram Moolenaarhi def link pythonException	Exception
299*f37506f6SBram Moolenaarhi def link pythonInclude		Include
300*f37506f6SBram Moolenaarhi def link pythonAsync		Statement
301*f37506f6SBram Moolenaarhi def link pythonDecorator	Define
302*f37506f6SBram Moolenaarhi def link pythonDecoratorName	Function
303*f37506f6SBram Moolenaarhi def link pythonFunction		Function
304*f37506f6SBram Moolenaarhi def link pythonComment		Comment
305*f37506f6SBram Moolenaarhi def link pythonTodo		Todo
306*f37506f6SBram Moolenaarhi def link pythonString		String
307*f37506f6SBram Moolenaarhi def link pythonRawString	String
308*f37506f6SBram Moolenaarhi def link pythonQuotes		String
309*f37506f6SBram Moolenaarhi def link pythonTripleQuotes	pythonQuotes
310*f37506f6SBram Moolenaarhi def link pythonEscape		Special
3115c73622aSBram Moolenaarif !exists("python_no_number_highlight")
312*f37506f6SBram Moolenaar  hi def link pythonNumber		Number
313071d4279SBram Moolenaarendif
3145c73622aSBram Moolenaarif !exists("python_no_builtin_highlight")
315*f37506f6SBram Moolenaar  hi def link pythonBuiltin	Function
316071d4279SBram Moolenaarendif
3175c73622aSBram Moolenaarif !exists("python_no_exception_highlight")
318*f37506f6SBram Moolenaar  hi def link pythonExceptions	Structure
319071d4279SBram Moolenaarendif
3205c73622aSBram Moolenaarif exists("python_space_error_highlight")
321*f37506f6SBram Moolenaar  hi def link pythonSpaceError	Error
322071d4279SBram Moolenaarendif
3235c73622aSBram Moolenaarif !exists("python_no_doctest_highlight")
324*f37506f6SBram Moolenaar  hi def link pythonDoctest	Special
325*f37506f6SBram Moolenaar  hi def link pythonDoctestValue	Define
3265c73622aSBram Moolenaarendif
327071d4279SBram Moolenaar
328071d4279SBram Moolenaar
329071d4279SBram Moolenaarlet b:current_syntax = "python"
330071d4279SBram Moolenaar
33100659069SBram Moolenaarlet &cpo = s:cpo_save
33200659069SBram Moolenaarunlet s:cpo_save
33300659069SBram Moolenaar
3345c73622aSBram Moolenaar" vim:set sw=2 sts=2 ts=8 noet:
335