python3.0.vim 15KB

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