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