xref: /vim-8.2.3635/runtime/syntax/python.vim (revision 83e138c6)
1" Vim syntax file
2" Language:	Python
3" Maintainer:	Neil Schemenauer <[email protected]>
4" Updated:	2006-10-15
5"		Added Python 2.4 features 2006 May 4 (Dmitry Vasiliev)
6"
7" Options to control Python syntax highlighting:
8"
9" For highlighted numbers:
10"
11"    let python_highlight_numbers = 1
12"
13" For highlighted builtin functions:
14"
15"    let python_highlight_builtins = 1
16"
17" For highlighted standard exceptions:
18"
19"    let python_highlight_exceptions = 1
20"
21" Highlight erroneous whitespace:
22"
23"    let python_highlight_space_errors = 1
24"
25" If you want all possible Python highlighting (the same as setting the
26" preceding options):
27"
28"    let python_highlight_all = 1
29"
30
31" For version 5.x: Clear all syntax items
32" For version 6.x: Quit when a syntax file was already loaded
33if version < 600
34  syntax clear
35elseif exists("b:current_syntax")
36  finish
37endif
38
39
40syn keyword pythonStatement	break continue del
41syn keyword pythonStatement	except exec finally
42syn keyword pythonStatement	pass print raise
43syn keyword pythonStatement	return try with
44syn keyword pythonStatement	global assert
45syn keyword pythonStatement	lambda yield
46syn keyword pythonStatement	def class nextgroup=pythonFunction skipwhite
47syn match   pythonFunction	"[a-zA-Z_][a-zA-Z0-9_]*" contained
48syn keyword pythonRepeat	for while
49syn keyword pythonConditional	if elif else
50syn keyword pythonOperator	and in is not or
51" AS will be a keyword in Python 3
52syn keyword pythonPreCondit	import from as
53syn match   pythonComment	"#.*$" contains=pythonTodo,@Spell
54syn keyword pythonTodo		TODO FIXME XXX contained
55
56" Decorators (new in Python 2.4)
57syn match   pythonDecorator	"@" display nextgroup=pythonFunction skipwhite
58
59" strings
60syn region pythonString		matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape,@Spell
61syn region pythonString		matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape,@Spell
62syn region pythonString		matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape,@Spell
63syn region pythonString		matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape,@Spell
64syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]'+ end=+'+ skip=+\\\\\|\\'+ contains=@Spell
65syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]"+ end=+"+ skip=+\\\\\|\\"+ contains=@Spell
66syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]"""+ end=+"""+ contains=@Spell
67syn region pythonRawString	matchgroup=Normal start=+[uU]\=[rR]'''+ end=+'''+ contains=@Spell
68syn match  pythonEscape		+\\[abfnrtv'"\\]+ contained
69syn match  pythonEscape		"\\\o\{1,3}" contained
70syn match  pythonEscape		"\\x\x\{2}" contained
71syn match  pythonEscape		"\(\\u\x\{4}\|\\U\x\{8}\)" contained
72syn match  pythonEscape		"\\$"
73
74if exists("python_highlight_all")
75  let python_highlight_numbers = 1
76  let python_highlight_builtins = 1
77  let python_highlight_exceptions = 1
78  let python_highlight_space_errors = 1
79endif
80
81if exists("python_highlight_numbers")
82  " numbers (including longs and complex)
83  syn match   pythonNumber	"\<0x\x\+[Ll]\=\>"
84  syn match   pythonNumber	"\<\d\+[LljJ]\=\>"
85  syn match   pythonNumber	"\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"
86  syn match   pythonNumber	"\<\d\+\.\([eE][+-]\=\d\+\)\=[jJ]\=\>"
87  syn match   pythonNumber	"\<\d\+\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>"
88endif
89
90if exists("python_highlight_builtins")
91  " builtin functions, types and objects, not really part of the syntax
92  syn keyword pythonBuiltin	True False bool enumerate set frozenset help
93  syn keyword pythonBuiltin	reversed sorted sum
94  syn keyword pythonBuiltin	Ellipsis None NotImplemented __import__ abs
95  syn keyword pythonBuiltin	apply buffer callable chr classmethod cmp
96  syn keyword pythonBuiltin	coerce compile complex delattr dict dir divmod
97  syn keyword pythonBuiltin	eval execfile file filter float getattr globals
98  syn keyword pythonBuiltin	hasattr hash hex id input int intern isinstance
99  syn keyword pythonBuiltin	issubclass iter len list locals long map max
100  syn keyword pythonBuiltin	min object oct open ord pow property range
101  syn keyword pythonBuiltin	raw_input reduce reload repr round setattr
102  syn keyword pythonBuiltin	slice staticmethod str super tuple type unichr
103  syn keyword pythonBuiltin	unicode vars xrange zip
104endif
105
106if exists("python_highlight_exceptions")
107  " builtin exceptions and warnings
108  syn keyword pythonException	ArithmeticError AssertionError AttributeError
109  syn keyword pythonException	DeprecationWarning EOFError EnvironmentError
110  syn keyword pythonException	Exception FloatingPointError IOError
111  syn keyword pythonException	ImportError IndentationError IndexError
112  syn keyword pythonException	KeyError KeyboardInterrupt LookupError
113  syn keyword pythonException	MemoryError NameError NotImplementedError
114  syn keyword pythonException	OSError OverflowError OverflowWarning
115  syn keyword pythonException	ReferenceError RuntimeError RuntimeWarning
116  syn keyword pythonException	StandardError StopIteration SyntaxError
117  syn keyword pythonException	SyntaxWarning SystemError SystemExit TabError
118  syn keyword pythonException	TypeError UnboundLocalError UnicodeError
119  syn keyword pythonException	UnicodeEncodeError UnicodeDecodeError
120  syn keyword pythonException	UnicodeTranslateError
121  syn keyword pythonException	UserWarning ValueError Warning WindowsError
122  syn keyword pythonException	ZeroDivisionError
123endif
124
125if exists("python_highlight_space_errors")
126  " trailing whitespace
127  syn match   pythonSpaceError   display excludenl "\S\s\+$"ms=s+1
128  " mixed tabs and spaces
129  syn match   pythonSpaceError   display " \+\t"
130  syn match   pythonSpaceError   display "\t\+ "
131endif
132
133" This is fast but code inside triple quoted strings screws it up. It
134" is impossible to fix because the only way to know if you are inside a
135" triple quoted string is to start from the beginning of the file. If
136" you have a fast machine you can try uncommenting the "sync minlines"
137" and commenting out the rest.
138syn sync match pythonSync grouphere NONE "):$"
139syn sync maxlines=200
140"syn sync minlines=2000
141
142if version >= 508 || !exists("did_python_syn_inits")
143  if version <= 508
144    let did_python_syn_inits = 1
145    command -nargs=+ HiLink hi link <args>
146  else
147    command -nargs=+ HiLink hi def link <args>
148  endif
149
150  " The default methods for highlighting.  Can be overridden later
151  HiLink pythonStatement	Statement
152  HiLink pythonFunction		Function
153  HiLink pythonConditional	Conditional
154  HiLink pythonRepeat		Repeat
155  HiLink pythonString		String
156  HiLink pythonRawString	String
157  HiLink pythonEscape		Special
158  HiLink pythonOperator		Operator
159  HiLink pythonPreCondit	PreCondit
160  HiLink pythonComment		Comment
161  HiLink pythonTodo		Todo
162  HiLink pythonDecorator	Define
163  if exists("python_highlight_numbers")
164    HiLink pythonNumber	Number
165  endif
166  if exists("python_highlight_builtins")
167    HiLink pythonBuiltin	Function
168  endif
169  if exists("python_highlight_exceptions")
170    HiLink pythonException	Exception
171  endif
172  if exists("python_highlight_space_errors")
173    HiLink pythonSpaceError	Error
174  endif
175
176  delcommand HiLink
177endif
178
179let b:current_syntax = "python"
180
181" vim: ts=8
182