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