xref: /vim-8.2.3635/runtime/syntax/python.vim (revision 071d4279)
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