comparison .vim/syntax/python.vim @ 0:c30d68fbd368

Initial import from svn.
author Augie Fackler <durin42@gmail.com>
date Wed, 26 Nov 2008 10:56:09 -0600
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:c30d68fbd368
1 " Vim syntax file
2 " Language: Python
3 " Maintainer: Dmitry Vasiliev <dima@hlabs.spb.ru>
4 " URL: http://www.hlabs.spb.ru/vim/python.vim
5 " Last Change: 2008-09-29
6 " Filenames: *.py
7 " Version: 2.6.3
8 "
9 " Based on python.vim (from Vim 6.1 distribution)
10 " by Neil Schemenauer <nas@python.ca>
11 "
12 " Thanks:
13 "
14 " Jeroen Ruigrok van der Werven
15 " for the idea to highlight erroneous operators
16 " Pedro Algarvio
17 " for the patch to enable spell checking only for the right spots
18 " (strings and comments)
19 " John Eikenberry
20 " for the patch fixing small typo
21
22 "
23 " Options:
24 "
25 " For set option do: let OPTION_NAME = 1
26 " For clear option do: let OPTION_NAME = 0
27 "
28 " Option names:
29 "
30 " For highlight builtin functions:
31 " python_highlight_builtins
32 "
33 " For highlight standard exceptions:
34 " python_highlight_exceptions
35 "
36 " For highlight string formatting:
37 " python_highlight_string_formatting
38 "
39 " For highlight str.format syntax:
40 " python_highlight_string_format
41 "
42 " For highlight string.Template syntax:
43 " python_highlight_string_templates
44 "
45 " For highlight indentation errors:
46 " python_highlight_indent_errors
47 "
48 " For highlight trailing spaces:
49 " python_highlight_space_errors
50 "
51 " For highlight doc-tests:
52 " python_highlight_doctests
53 "
54 " If you want all Python highlightings above:
55 " python_highlight_all
56 " (This option not override previously set options)
57 "
58 " For fast machines:
59 " python_slow_sync
60 "
61 " For "print" builtin as function:
62 " python_print_as_function
63
64 " For version 5.x: Clear all syntax items
65 " For version 6.x: Quit when a syntax file was already loaded
66 if version < 600
67 syntax clear
68 elseif exists("b:current_syntax")
69 finish
70 endif
71
72 if exists("python_highlight_all") && python_highlight_all != 0
73 " Not override previously set options
74 if !exists("python_highlight_builtins")
75 let python_highlight_builtins = 1
76 endif
77 if !exists("python_highlight_exceptions")
78 let python_highlight_exceptions = 1
79 endif
80 if !exists("python_highlight_string_formatting")
81 let python_highlight_string_formatting = 1
82 endif
83 if !exists("python_highlight_string_format")
84 let python_highlight_string_format = 1
85 endif
86 if !exists("python_highlight_string_templates")
87 let python_highlight_string_templates = 1
88 endif
89 if !exists("python_highlight_indent_errors")
90 let python_highlight_indent_errors = 1
91 endif
92 if !exists("python_highlight_space_errors")
93 let python_highlight_space_errors = 1
94 endif
95 if !exists("python_highlight_doctests")
96 let python_highlight_doctests = 1
97 endif
98 endif
99
100 " Keywords
101 syn keyword pythonStatement break continue del
102 syn keyword pythonStatement exec return
103 syn keyword pythonStatement pass raise
104 syn keyword pythonStatement global assert
105 syn keyword pythonStatement lambda yield
106 syn keyword pythonStatement with
107 syn keyword pythonStatement def class nextgroup=pythonFunction skipwhite
108 syn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" display contained
109 syn keyword pythonRepeat for while
110 syn keyword pythonConditional if elif else
111 syn keyword pythonImport import from as
112 syn keyword pythonException try except finally
113 syn keyword pythonOperator and in is not or
114
115 if !exists("python_print_as_function") || python_print_as_function == 0
116 syn keyword pythonStatement print
117 endif
118
119 " Decorators (new in Python 2.4)
120 syn match pythonDecorator "@" display nextgroup=pythonFunction skipwhite
121
122 " Comments
123 syn match pythonComment "#.*$" display contains=pythonTodo,@Spell
124 syn match pythonRun "\%^#!.*$"
125 syn match pythonCoding "\%^.*\(\n.*\)\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$"
126 syn keyword pythonTodo TODO FIXME XXX contained
127
128 " Errors
129 syn match pythonError "\<\d\+\D\+\>" display
130 syn match pythonError "[$?]" display
131 syn match pythonError "[&|]\{2,}" display
132 syn match pythonError "[=]\{3,}" display
133
134 " TODO: Mixing spaces and tabs also may be used for pretty formatting multiline
135 " statements. For now I don't know how to work around this.
136 if exists("python_highlight_indent_errors") && python_highlight_indent_errors != 0
137 syn match pythonIndentError "^\s*\( \t\|\t \)\s*\S"me=e-1 display
138 endif
139
140 " Trailing space errors
141 if exists("python_highlight_space_errors") && python_highlight_space_errors != 0
142 syn match pythonSpaceError "\s\+$" display
143 endif
144
145 " Strings
146 syn region pythonString start=+[bB]\='+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell
147 syn region pythonString start=+[bB]\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell
148 syn region pythonString start=+[bB]\="""+ end=+"""+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest2,pythonSpaceError,@Spell
149 syn region pythonString start=+[bB]\='''+ end=+'''+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest,pythonSpaceError,@Spell
150
151 syn match pythonEscape +\\[abfnrtv'"\\]+ display contained
152 syn match pythonEscape "\\\o\o\=\o\=" display contained
153 syn match pythonEscapeError "\\\o\{,2}[89]" display contained
154 syn match pythonEscape "\\x\x\{2}" display contained
155 syn match pythonEscapeError "\\x\x\=\X" display contained
156 syn match pythonEscape "\\$"
157
158 " Unicode strings
159 syn region pythonUniString start=+[uU]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,@Spell
160 syn region pythonUniString start=+[uU]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,@Spell
161 syn region pythonUniString start=+[uU]"""+ end=+"""+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell
162 syn region pythonUniString start=+[uU]'''+ end=+'''+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell
163
164 syn match pythonUniEscape "\\u\x\{4}" display contained
165 syn match pythonUniEscapeError "\\u\x\{,3}\X" display contained
166 syn match pythonUniEscape "\\U\x\{8}" display contained
167 syn match pythonUniEscapeError "\\U\x\{,7}\X" display contained
168 syn match pythonUniEscape "\\N{[A-Z ]\+}" display contained
169 syn match pythonUniEscapeError "\\N{[^A-Z ]\+}" display contained
170
171 " Raw strings
172 syn region pythonRawString start=+[rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell
173 syn region pythonRawString start=+[rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell
174 syn region pythonRawString start=+[rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell
175 syn region pythonRawString start=+[rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell
176
177 syn match pythonRawEscape +\\['"]+ display transparent contained
178
179 " Unicode raw strings
180 syn region pythonUniRawString start=+[uU][rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell
181 syn region pythonUniRawString start=+[uU][rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell
182 syn region pythonUniRawString start=+[uU][rR]"""+ end=+"""+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest2,pythonSpaceError,@Spell
183 syn region pythonUniRawString start=+[uU][rR]'''+ end=+'''+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest,pythonSpaceError,@Spell
184
185 syn match pythonUniRawEscape "\([^\\]\(\\\\\)*\)\@<=\\u\x\{4}" display contained
186 syn match pythonUniRawEscapeError "\([^\\]\(\\\\\)*\)\@<=\\u\x\{,3}\X" display contained
187
188 if exists("python_highlight_string_formatting") && python_highlight_string_formatting != 0
189 " String formatting
190 syn match pythonStrFormatting "%\(([^)]\+)\)\=[-#0 +]*\d*\(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
191 syn match pythonStrFormatting "%[-#0 +]*\(\*\|\d\+\)\=\(\.\(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
192 endif
193
194 if exists("python_highlight_string_format") && python_highlight_string_format != 0
195 " str.format syntax
196 syn match pythonStrFormat "{{\|}}" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
197 syn match pythonStrFormat "{\([a-zA-Z_][a-zA-Z0-9_]*\|\d\+\)\(\.[a-zA-Z_][a-zA-Z0-9_]*\|\[\(\d\+\|[^!:\}]\+\)\]\)*\(![rs]\)\=\(:\({\([a-zA-Z_][a-zA-Z0-9_]*\|\d\+\)}\|\([^}]\=[<>=^]\)\=[ +-]\=#\=0\=\d*\(\.\d\+\)\=[bcdeEfFgGnoxX%]\=\)\=\)\=}" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
198 endif
199
200 if exists("python_highlight_string_templates") && python_highlight_string_templates != 0
201 " String templates
202 syn match pythonStrTemplate "\$\$" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
203 syn match pythonStrTemplate "\${[a-zA-Z_][a-zA-Z0-9_]*}" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
204 syn match pythonStrTemplate "\$[a-zA-Z_][a-zA-Z0-9_]*" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
205 endif
206
207 if exists("python_highlight_doctests") && python_highlight_doctests != 0
208 " DocTests
209 syn region pythonDocTest start="^\s*>>>" end=+'''+he=s-1 end="^\s*$" contained
210 syn region pythonDocTest2 start="^\s*>>>" end=+"""+he=s-1 end="^\s*$" contained
211 endif
212
213 " Numbers (ints, longs, floats, complex)
214 syn match pythonHexError "\<0[xX]\x*[g-zG-Z]\x*[lL]\=\>" display
215
216 syn match pythonHexNumber "\<0[xX]\x\+[lL]\=\>" display
217 syn match pythonOctNumber "\<0[oO]\o\+[lL]\=\>" display
218 syn match pythonBinNumber "\<0[bB][01]\+[lL]\=\>" display
219
220 syn match pythonNumber "\<\d\+[lLjJ]\=\>" display
221
222 syn match pythonFloat "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" display
223 syn match pythonFloat "\<\d\+[eE][+-]\=\d\+[jJ]\=\>" display
224 syn match pythonFloat "\<\d\+\.\d*\([eE][+-]\=\d\+\)\=[jJ]\=" display
225
226 syn match pythonOctError "\<0[oO]\=\o*[8-9]\d*[lL]\=\>" display
227 syn match pythonBinError "\<0[bB][01]*[2-9]\d*[lL]\=\>" display
228
229 if exists("python_highlight_builtins") && python_highlight_builtins != 0
230 " Builtin functions, types and objects
231 syn keyword pythonBuiltinObj True False Ellipsis None NotImplemented
232 syn keyword pythonBuiltinObj __debug__ __doc__ __file__ __name__ __package__
233
234 syn keyword pythonBuiltinFunc __import__ abs all any apply
235 syn keyword pythonBuiltinFunc basestring bin bool buffer bytearray bytes callable
236 syn keyword pythonBuiltinFunc chr classmethod cmp coerce compile complex
237 syn keyword pythonBuiltinFunc delattr dict dir divmod enumerate eval
238 syn keyword pythonBuiltinFunc execfile file filter float format frozenset getattr
239 syn keyword pythonBuiltinFunc globals hasattr hash help hex id
240 syn keyword pythonBuiltinFunc input int intern isinstance
241 syn keyword pythonBuiltinFunc issubclass iter len list locals long map max
242 syn keyword pythonBuiltinFunc min next object oct open ord
243 syn keyword pythonBuiltinFunc pow property range
244 syn keyword pythonBuiltinFunc raw_input reduce reload repr
245 syn keyword pythonBuiltinFunc reversed round set setattr
246 syn keyword pythonBuiltinFunc slice sorted staticmethod str sum super tuple
247 syn keyword pythonBuiltinFunc type unichr unicode vars xrange zip
248
249 if exists("python_print_as_function") && python_print_as_function != 0
250 syn keyword pythonBuiltinFunc print
251 endif
252 endif
253
254 if exists("python_highlight_exceptions") && python_highlight_exceptions != 0
255 " Builtin exceptions and warnings
256 syn keyword pythonExClass BaseException
257 syn keyword pythonExClass Exception StandardError ArithmeticError
258 syn keyword pythonExClass LookupError EnvironmentError
259
260 syn keyword pythonExClass AssertionError AttributeError BufferError EOFError
261 syn keyword pythonExClass FloatingPointError GeneratorExit IOError
262 syn keyword pythonExClass ImportError IndexError KeyError
263 syn keyword pythonExClass KeyboardInterrupt MemoryError NameError
264 syn keyword pythonExClass NotImplementedError OSError OverflowError
265 syn keyword pythonExClass ReferenceError RuntimeError StopIteration
266 syn keyword pythonExClass SyntaxError IndentationError TabError
267 syn keyword pythonExClass SystemError SystemExit TypeError
268 syn keyword pythonExClass UnboundLocalError UnicodeError
269 syn keyword pythonExClass UnicodeEncodeError UnicodeDecodeError
270 syn keyword pythonExClass UnicodeTranslateError ValueError VMSError
271 syn keyword pythonExClass WindowsError ZeroDivisionError
272
273 syn keyword pythonExClass Warning UserWarning BytesWarning DeprecationWarning
274 syn keyword pythonExClass PendingDepricationWarning SyntaxWarning
275 syn keyword pythonExClass RuntimeWarning FutureWarning
276 syn keyword pythonExClass ImportWarning UnicodeWarning
277 endif
278
279 if exists("python_slow_sync") && python_slow_sync != 0
280 syn sync minlines=2000
281 else
282 " This is fast but code inside triple quoted strings screws it up. It
283 " is impossible to fix because the only way to know if you are inside a
284 " triple quoted string is to start from the beginning of the file.
285 syn sync match pythonSync grouphere NONE "):$"
286 syn sync maxlines=200
287 endif
288
289 if version >= 508 || !exists("did_python_syn_inits")
290 if version <= 508
291 let did_python_syn_inits = 1
292 command -nargs=+ HiLink hi link <args>
293 else
294 command -nargs=+ HiLink hi def link <args>
295 endif
296
297 HiLink pythonStatement Statement
298 HiLink pythonImport Statement
299 HiLink pythonFunction Function
300 HiLink pythonConditional Conditional
301 HiLink pythonRepeat Repeat
302 HiLink pythonException Exception
303 HiLink pythonOperator Operator
304
305 HiLink pythonDecorator Define
306
307 HiLink pythonComment Comment
308 HiLink pythonCoding Special
309 HiLink pythonRun Special
310 HiLink pythonTodo Todo
311
312 HiLink pythonError Error
313 HiLink pythonIndentError Error
314 HiLink pythonSpaceError Error
315
316 HiLink pythonString String
317 HiLink pythonUniString String
318 HiLink pythonRawString String
319 HiLink pythonUniRawString String
320
321 HiLink pythonEscape Special
322 HiLink pythonEscapeError Error
323 HiLink pythonUniEscape Special
324 HiLink pythonUniEscapeError Error
325 HiLink pythonUniRawEscape Special
326 HiLink pythonUniRawEscapeError Error
327
328 HiLink pythonStrFormatting Special
329 HiLink pythonStrFormat Special
330 HiLink pythonStrTemplate Special
331
332 HiLink pythonDocTest Special
333 HiLink pythonDocTest2 Special
334
335 HiLink pythonNumber Number
336 HiLink pythonHexNumber Number
337 HiLink pythonOctNumber Number
338 HiLink pythonBinNumber Number
339 HiLink pythonFloat Float
340 HiLink pythonOctError Error
341 HiLink pythonHexError Error
342 HiLink pythonBinError Error
343
344 HiLink pythonBuiltinObj Structure
345 HiLink pythonBuiltinFunc Function
346
347 HiLink pythonExClass Structure
348
349 delcommand HiLink
350 endif
351
352 let b:current_syntax = "python"