python.vim 26KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. " Vim syntax file
  2. " Language: Python
  3. " Current Maintainer: Dmitry Vasiliev <dima at hlabs dot org>
  4. " Previous Maintainer: Neil Schemenauer <nas at python dot ca>
  5. " URL: https://github.com/hdima/python-syntax
  6. " Last Change: 2015-11-01
  7. " Filenames: *.py
  8. " Version: 3.6.0
  9. "
  10. " Based on python.vim (from Vim 6.1 distribution)
  11. " by Neil Schemenauer <nas at python dot ca>
  12. "
  13. " Please use the following channels for reporting bugs, offering suggestions or
  14. " feedback:
  15. " - python.vim issue tracker: https://github.com/hdima/python-syntax/issues
  16. " - Email: Dmitry Vasiliev (dima at hlabs.org)
  17. " - Send a message or follow me for updates on Twitter: `@hdima
  18. " <https://twitter.com/hdima>`__
  19. "
  20. " Contributors
  21. " ============
  22. "
  23. " List of the contributors in alphabetical order:
  24. "
  25. " Andrea Riciputi
  26. " Anton Butanaev
  27. " Antony Lee
  28. " Caleb Adamantine
  29. " David Briscoe
  30. " Elizabeth Myers
  31. " Ihor Gorobets
  32. " Jeroen Ruigrok van der Werven
  33. " John Eikenberry
  34. " Joongi Kim
  35. " Marc Weber
  36. " Pedro Algarvio
  37. " Victor Salgado
  38. " Will Gray
  39. " Yuri Habrusiev
  40. "
  41. " Options
  42. " =======
  43. "
  44. " :let OPTION_NAME = 1 Enable option
  45. " :let OPTION_NAME = 0 Disable option
  46. "
  47. "
  48. " Option to select Python version
  49. " -------------------------------
  50. "
  51. " python_version_2 Enable highlighting for Python 2
  52. " (Python 3 highlighting is enabled
  53. " by default). Can also be set as
  54. " a buffer (b:python_version_2)
  55. " variable.
  56. "
  57. " You can also use the following local to buffer commands to switch
  58. " between two highlighting modes:
  59. "
  60. " :Python2Syntax Switch to Python 2 highlighting
  61. " mode
  62. " :Python3Syntax Switch to Python 3 highlighting
  63. " mode
  64. "
  65. " Option names used by the script
  66. " -------------------------------
  67. "
  68. " python_highlight_builtins Highlight builtin functions and
  69. " objects
  70. " python_highlight_builtin_objs Highlight builtin objects only
  71. " python_highlight_builtin_funcs Highlight builtin functions only
  72. " python_highlight_exceptions Highlight standard exceptions
  73. " python_highlight_string_formatting Highlight % string formatting
  74. " python_highlight_string_format Highlight str.format syntax
  75. " python_highlight_string_templates Highlight string.Template syntax
  76. " python_highlight_indent_errors Highlight indentation errors
  77. " python_highlight_space_errors Highlight trailing spaces
  78. " python_highlight_doctests Highlight doc-tests
  79. " python_print_as_function Highlight 'print' statement as
  80. " function for Python 2
  81. " python_highlight_file_headers_as_comments
  82. " Highlight shebang and coding
  83. " headers as comments
  84. "
  85. " python_highlight_all Enable all the options above
  86. " NOTE: This option don't override
  87. " any previously set options
  88. "
  89. " python_slow_sync Can be set to 0 for slow machines
  90. "
  91. " For version 5.x: Clear all syntax items
  92. " For versions greater than 6.x: Quit when a syntax file was already loaded
  93. if version < 600
  94. syntax clear
  95. elseif exists("b:current_syntax")
  96. finish
  97. endif
  98. "
  99. " Commands
  100. "
  101. command! -buffer Python2Syntax let b:python_version_2 = 1 | let &syntax=&syntax
  102. command! -buffer Python3Syntax let b:python_version_2 = 0 | let &syntax=&syntax
  103. " Enable option if it's not defined
  104. function! s:EnableByDefault(name)
  105. if !exists(a:name)
  106. let {a:name} = 1
  107. endif
  108. endfunction
  109. " Check if option is enabled
  110. function! s:Enabled(name)
  111. return exists(a:name) && {a:name}
  112. endfunction
  113. " Is it Python 2 syntax?
  114. function! s:Python2Syntax()
  115. if exists("b:python_version_2")
  116. return b:python_version_2
  117. endif
  118. return s:Enabled("g:python_version_2")
  119. endfunction
  120. "
  121. " Default options
  122. "
  123. call s:EnableByDefault("g:python_slow_sync")
  124. if s:Enabled("g:python_highlight_all")
  125. call s:EnableByDefault("g:python_highlight_builtins")
  126. if s:Enabled("g:python_highlight_builtins")
  127. call s:EnableByDefault("g:python_highlight_builtin_objs")
  128. call s:EnableByDefault("g:python_highlight_builtin_funcs")
  129. endif
  130. call s:EnableByDefault("g:python_highlight_exceptions")
  131. call s:EnableByDefault("g:python_highlight_string_formatting")
  132. call s:EnableByDefault("g:python_highlight_string_format")
  133. call s:EnableByDefault("g:python_highlight_string_templates")
  134. call s:EnableByDefault("g:python_highlight_indent_errors")
  135. call s:EnableByDefault("g:python_highlight_space_errors")
  136. call s:EnableByDefault("g:python_highlight_doctests")
  137. call s:EnableByDefault("g:python_print_as_function")
  138. endif
  139. "
  140. " Keywords
  141. "
  142. syn keyword pythonStatement break continue del
  143. syn keyword pythonStatement exec return
  144. syn keyword pythonStatement pass raise
  145. syn keyword pythonStatement global assert
  146. syn keyword pythonStatement lambda
  147. syn keyword pythonStatement with
  148. syn keyword pythonStatement def class nextgroup=pythonFunction skipwhite
  149. syn keyword pythonRepeat for while
  150. syn keyword pythonConditional if elif else
  151. " The standard pyrex.vim unconditionally removes the pythonInclude group, so
  152. " we provide a dummy group here to avoid crashing pyrex.vim.
  153. syn keyword pythonInclude import
  154. syn keyword pythonImport import
  155. syn keyword pythonException try except finally
  156. syn keyword pythonOperator and in is not or
  157. syn match pythonStatement "\<yield\>" display
  158. syn match pythonImport "\<from\>" display
  159. if s:Python2Syntax()
  160. if !s:Enabled("g:python_print_as_function")
  161. syn keyword pythonStatement print
  162. endif
  163. syn keyword pythonImport as
  164. syn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" display contained
  165. else
  166. syn keyword pythonStatement as nonlocal None
  167. syn match pythonStatement "\<yield\s\+from\>" display
  168. syn keyword pythonBoolean True False
  169. syn match pythonFunction "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained
  170. syn keyword pythonStatement await
  171. syn match pythonStatement "\<async\s\+def\>" nextgroup=pythonFunction skipwhite
  172. syn match pythonStatement "\<async\s\+with\>" display
  173. syn match pythonStatement "\<async\s\+for\>" display
  174. endif
  175. "
  176. " Decorators (new in Python 2.4)
  177. "
  178. syn match pythonDecorator "@" display nextgroup=pythonDottedName skipwhite
  179. if s:Python2Syntax()
  180. syn match pythonDottedName "[a-zA-Z_][a-zA-Z0-9_]*\%(\.[a-zA-Z_][a-zA-Z0-9_]*\)*" display contained
  181. else
  182. syn match pythonDottedName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\%(\.\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\)*" display contained
  183. endif
  184. syn match pythonDot "\." display containedin=pythonDottedName
  185. "
  186. " Comments
  187. "
  188. syn match pythonComment "#.*$" display contains=pythonTodo,@Spell
  189. if !s:Enabled("g:python_highlight_file_headers_as_comments")
  190. syn match pythonRun "\%^#!.*$"
  191. syn match pythonCoding "\%^.*\%(\n.*\)\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$"
  192. endif
  193. syn keyword pythonTodo TODO FIXME XXX contained
  194. "
  195. " Classes
  196. "
  197. syn match pythonClass "\(import \)\@<!\<[A-Z][a-zA-Z]*\>" display
  198. "
  199. " Errors
  200. "
  201. syn match pythonError "\<\d\+\D\+\>" display
  202. syn match pythonError "[$?]" display
  203. syn match pythonError "[&|]\{2,}" display
  204. syn match pythonError "[=]\{3,}" display
  205. " Mixing spaces and tabs also may be used for pretty formatting multiline
  206. " statements
  207. if s:Enabled("g:python_highlight_indent_errors")
  208. syn match pythonIndentError "^\s*\%( \t\|\t \)\s*\S"me=e-1 display
  209. endif
  210. " Trailing space errors
  211. if s:Enabled("g:python_highlight_space_errors")
  212. syn match pythonSpaceError "\s\+$" display
  213. endif
  214. "
  215. " Strings
  216. "
  217. if s:Python2Syntax()
  218. " Python 2 strings
  219. syn region pythonString start=+[bB]\='+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell
  220. syn region pythonString start=+[bB]\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell
  221. syn region pythonString start=+[bB]\="""+ end=+"""+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell
  222. syn region pythonString start=+[bB]\='''+ end=+'''+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell
  223. else
  224. " Python 3 byte strings
  225. syn region pythonBytes start=+[bB]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesError,pythonBytesContent,@Spell
  226. syn region pythonBytes start=+[bB]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesError,pythonBytesContent,@Spell
  227. syn region pythonBytes start=+[bB]"""+ end=+"""+ keepend contains=pythonBytesError,pythonBytesContent,pythonDocTest2,pythonSpaceError,@Spell
  228. syn region pythonBytes start=+[bB]'''+ end=+'''+ keepend contains=pythonBytesError,pythonBytesContent,pythonDocTest,pythonSpaceError,@Spell
  229. syn match pythonBytesError ".\+" display contained
  230. syn match pythonBytesContent "[\u0000-\u00ff]\+" display contained contains=pythonBytesEscape,pythonBytesEscapeError
  231. endif
  232. syn match pythonBytesEscape +\\[abfnrtv'"\\]+ display contained
  233. syn match pythonBytesEscape "\\\o\o\=\o\=" display contained
  234. syn match pythonBytesEscapeError "\\\o\{,2}[89]" display contained
  235. syn match pythonBytesEscape "\\x\x\{2}" display contained
  236. syn match pythonBytesEscapeError "\\x\x\=\X" display contained
  237. syn match pythonBytesEscape "\\$"
  238. syn match pythonUniEscape "\\u\x\{4}" display contained
  239. syn match pythonUniEscapeError "\\u\x\{,3}\X" display contained
  240. syn match pythonUniEscape "\\U\x\{8}" display contained
  241. syn match pythonUniEscapeError "\\U\x\{,7}\X" display contained
  242. syn match pythonUniEscape "\\N{[A-Z ]\+}" display contained
  243. syn match pythonUniEscapeError "\\N{[^A-Z ]\+}" display contained
  244. if s:Python2Syntax()
  245. " Python 2 Unicode strings
  246. syn region pythonUniString start=+[uU]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell
  247. syn region pythonUniString start=+[uU]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell
  248. syn region pythonUniString start=+[uU]"""+ end=+"""+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell
  249. syn region pythonUniString start=+[uU]'''+ end=+'''+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell
  250. else
  251. " Python 3 strings
  252. syn region pythonString start=+'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell
  253. syn region pythonString start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell
  254. syn region pythonString start=+"""+ end=+"""+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell
  255. syn region pythonString start=+'''+ end=+'''+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell
  256. endif
  257. if s:Python2Syntax()
  258. " Python 2 Unicode raw strings
  259. syn region pythonUniRawString start=+[uU][rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell
  260. syn region pythonUniRawString start=+[uU][rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell
  261. syn region pythonUniRawString start=+[uU][rR]"""+ end=+"""+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest2,pythonSpaceError,@Spell
  262. syn region pythonUniRawString start=+[uU][rR]'''+ end=+'''+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest,pythonSpaceError,@Spell
  263. syn match pythonUniRawEscape "\([^\\]\(\\\\\)*\)\@<=\\u\x\{4}" display contained
  264. syn match pythonUniRawEscapeError "\([^\\]\(\\\\\)*\)\@<=\\u\x\{,3}\X" display contained
  265. endif
  266. " Python 2/3 raw strings
  267. if s:Python2Syntax()
  268. syn region pythonRawString start=+[bB]\=[rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell
  269. syn region pythonRawString start=+[bB]\=[rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell
  270. syn region pythonRawString start=+[bB]\=[rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell
  271. syn region pythonRawString start=+[bB]\=[rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell
  272. else
  273. syn region pythonRawString start=+[rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell
  274. syn region pythonRawString start=+[rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell
  275. syn region pythonRawString start=+[rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell
  276. syn region pythonRawString start=+[rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell
  277. syn region pythonRawBytes start=+[bB][rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell
  278. syn region pythonRawBytes start=+[bB][rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell
  279. syn region pythonRawBytes start=+[bB][rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell
  280. syn region pythonRawBytes start=+[bB][rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell
  281. endif
  282. syn match pythonRawEscape +\\['"]+ display transparent contained
  283. if s:Enabled("g:python_highlight_string_formatting")
  284. " % operator string formatting
  285. if s:Python2Syntax()
  286. syn match pythonStrFormatting "%\%(([^)]\+)\)\=[-#0 +]*\d*\%(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString
  287. syn match pythonStrFormatting "%[-#0 +]*\%(\*\|\d\+\)\=\%(\.\%(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString
  288. else
  289. syn match pythonStrFormatting "%\%(([^)]\+)\)\=[-#0 +]*\d*\%(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonRawString
  290. syn match pythonStrFormatting "%[-#0 +]*\%(\*\|\d\+\)\=\%(\.\%(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonRawString
  291. endif
  292. endif
  293. if s:Enabled("g:python_highlight_string_format")
  294. " str.format syntax
  295. if s:Python2Syntax()
  296. syn match pythonStrFormat "{{\|}}" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString
  297. 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\+\)\=[bcdeEfFgGnosxX%]\=\)\=\)\=}" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString
  298. else
  299. syn match pythonStrFormat "{{\|}}" contained containedin=pythonString,pythonRawString
  300. 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\+\)\=[bcdeEfFgGnosxX%]\=\)\=\)\=}" contained containedin=pythonString,pythonRawString
  301. endif
  302. endif
  303. if s:Enabled("g:python_highlight_string_templates")
  304. " string.Template format
  305. if s:Python2Syntax()
  306. syn match pythonStrTemplate "\$\$" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString
  307. syn match pythonStrTemplate "\${[a-zA-Z_][a-zA-Z0-9_]*}" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString
  308. syn match pythonStrTemplate "\$[a-zA-Z_][a-zA-Z0-9_]*" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString
  309. else
  310. syn match pythonStrTemplate "\$\$" contained containedin=pythonString,pythonRawString
  311. syn match pythonStrTemplate "\${[a-zA-Z_][a-zA-Z0-9_]*}" contained containedin=pythonString,pythonRawString
  312. syn match pythonStrTemplate "\$[a-zA-Z_][a-zA-Z0-9_]*" contained containedin=pythonString,pythonRawString
  313. endif
  314. endif
  315. if s:Enabled("g:python_highlight_doctests")
  316. " DocTests
  317. syn region pythonDocTest start="^\s*>>>" end=+'''+he=s-1 end="^\s*$" contained
  318. syn region pythonDocTest2 start="^\s*>>>" end=+"""+he=s-1 end="^\s*$" contained
  319. endif
  320. "
  321. " Numbers (ints, longs, floats, complex)
  322. "
  323. if s:Python2Syntax()
  324. syn match pythonHexError "\<0[xX]\x*[g-zG-Z]\+\x*[lL]\=\>" display
  325. syn match pythonOctError "\<0[oO]\=\o*\D\+\d*[lL]\=\>" display
  326. syn match pythonBinError "\<0[bB][01]*\D\+\d*[lL]\=\>" display
  327. syn match pythonHexNumber "\<0[xX]\x\+[lL]\=\>" display
  328. syn match pythonOctNumber "\<0[oO]\o\+[lL]\=\>" display
  329. syn match pythonBinNumber "\<0[bB][01]\+[lL]\=\>" display
  330. syn match pythonNumberError "\<\d\+\D[lL]\=\>" display
  331. syn match pythonNumber "\<\d[lL]\=\>" display
  332. syn match pythonNumber "\<[0-9]\d\+[lL]\=\>" display
  333. syn match pythonNumber "\<\d\+[lLjJ]\>" display
  334. syn match pythonOctError "\<0[oO]\=\o*[8-9]\d*[lL]\=\>" display
  335. syn match pythonBinError "\<0[bB][01]*[2-9]\d*[lL]\=\>" display
  336. else
  337. syn match pythonHexError "\<0[xX]\x*[g-zG-Z]\x*\>" display
  338. syn match pythonOctError "\<0[oO]\=\o*\D\+\d*\>" display
  339. syn match pythonBinError "\<0[bB][01]*\D\+\d*\>" display
  340. syn match pythonHexNumber "\<0[xX]\x\+\>" display
  341. syn match pythonOctNumber "\<0[oO]\o\+\>" display
  342. syn match pythonBinNumber "\<0[bB][01]\+\>" display
  343. syn match pythonNumberError "\<\d\+\D\>" display
  344. syn match pythonNumberError "\<0\d\+\>" display
  345. syn match pythonNumber "\<\d\>" display
  346. syn match pythonNumber "\<[1-9]\d\+\>" display
  347. syn match pythonNumber "\<\d\+[jJ]\>" display
  348. syn match pythonOctError "\<0[oO]\=\o*[8-9]\d*\>" display
  349. syn match pythonBinError "\<0[bB][01]*[2-9]\d*\>" display
  350. endif
  351. syn match pythonFloat "\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>" display
  352. syn match pythonFloat "\<\d\+[eE][+-]\=\d\+[jJ]\=\>" display
  353. syn match pythonFloat "\<\d\+\.\d*\%([eE][+-]\=\d\+\)\=[jJ]\=" display
  354. "
  355. " Builtin objects and types
  356. "
  357. if s:Enabled("g:python_highlight_builtin_objs")
  358. if s:Python2Syntax()
  359. syn keyword pythonBuiltinObj None
  360. syn keyword pythonBoolean True False
  361. endif
  362. syn keyword pythonBuiltinObj Ellipsis NotImplemented
  363. syn keyword pythonBuiltinObj __debug__ __doc__ __file__ __name__ __package__
  364. endif
  365. "
  366. " Builtin functions
  367. "
  368. if s:Enabled("g:python_highlight_builtin_funcs")
  369. if s:Python2Syntax()
  370. syn keyword pythonBuiltinFunc apply basestring buffer callable coerce
  371. syn keyword pythonBuiltinFunc execfile file help intern long raw_input
  372. syn keyword pythonBuiltinFunc reduce reload unichr unicode xrange
  373. if s:Enabled("g:python_print_as_function")
  374. syn keyword pythonBuiltinFunc print
  375. endif
  376. else
  377. syn keyword pythonBuiltinFunc ascii exec memoryview print
  378. endif
  379. syn keyword pythonBuiltinFunc __import__ abs all any
  380. syn keyword pythonBuiltinFunc bin bool bytearray bytes
  381. syn keyword pythonBuiltinFunc chr classmethod cmp compile complex
  382. syn keyword pythonBuiltinFunc delattr dict dir divmod enumerate eval
  383. syn keyword pythonBuiltinFunc filter float format frozenset getattr
  384. syn keyword pythonBuiltinFunc globals hasattr hash hex id
  385. syn keyword pythonBuiltinFunc input int isinstance
  386. syn keyword pythonBuiltinFunc issubclass iter len list locals map max
  387. syn keyword pythonBuiltinFunc min next object oct open ord
  388. syn keyword pythonBuiltinFunc pow property range
  389. syn keyword pythonBuiltinFunc repr reversed round set setattr
  390. syn keyword pythonBuiltinFunc slice sorted staticmethod str sum super tuple
  391. syn keyword pythonBuiltinFunc type vars zip
  392. endif
  393. "
  394. " Builtin exceptions and warnings
  395. "
  396. if s:Enabled("g:python_highlight_exceptions")
  397. if s:Python2Syntax()
  398. syn keyword pythonExClass StandardError
  399. else
  400. syn keyword pythonExClass BlockingIOError ChildProcessError
  401. syn keyword pythonExClass ConnectionError BrokenPipeError
  402. syn keyword pythonExClass ConnectionAbortedError ConnectionRefusedError
  403. syn keyword pythonExClass ConnectionResetError FileExistsError
  404. syn keyword pythonExClass FileNotFoundError InterruptedError
  405. syn keyword pythonExClass IsADirectoryError NotADirectoryError
  406. syn keyword pythonExClass PermissionError ProcessLookupError TimeoutError
  407. syn keyword pythonExClass ResourceWarning
  408. endif
  409. syn keyword pythonExClass BaseException
  410. syn keyword pythonExClass Exception ArithmeticError
  411. syn keyword pythonExClass LookupError EnvironmentError
  412. syn keyword pythonExClass AssertionError AttributeError BufferError EOFError
  413. syn keyword pythonExClass FloatingPointError GeneratorExit IOError
  414. syn keyword pythonExClass ImportError IndexError KeyError
  415. syn keyword pythonExClass KeyboardInterrupt MemoryError NameError
  416. syn keyword pythonExClass NotImplementedError OSError OverflowError
  417. syn keyword pythonExClass ReferenceError RuntimeError StopIteration
  418. syn keyword pythonExClass SyntaxError IndentationError TabError
  419. syn keyword pythonExClass SystemError SystemExit TypeError
  420. syn keyword pythonExClass UnboundLocalError UnicodeError
  421. syn keyword pythonExClass UnicodeEncodeError UnicodeDecodeError
  422. syn keyword pythonExClass UnicodeTranslateError ValueError VMSError
  423. syn keyword pythonExClass WindowsError ZeroDivisionError
  424. syn keyword pythonExClass Warning UserWarning BytesWarning DeprecationWarning
  425. syn keyword pythonExClass PendingDepricationWarning SyntaxWarning
  426. syn keyword pythonExClass RuntimeWarning FutureWarning
  427. syn keyword pythonExClass ImportWarning UnicodeWarning
  428. endif
  429. if s:Enabled("g:python_slow_sync")
  430. syn sync minlines=2000
  431. else
  432. " This is fast but code inside triple quoted strings screws it up. It
  433. " is impossible to fix because the only way to know if you are inside a
  434. " triple quoted string is to start from the beginning of the file.
  435. syn sync match pythonSync grouphere NONE "):$"
  436. syn sync maxlines=200
  437. endif
  438. if version >= 508 || !exists("did_python_syn_inits")
  439. if version <= 508
  440. let did_python_syn_inits = 1
  441. command -nargs=+ HiLink hi link <args>
  442. else
  443. command -nargs=+ HiLink hi def link <args>
  444. endif
  445. HiLink pythonStatement Statement
  446. HiLink pythonImport Include
  447. HiLink pythonFunction Function
  448. HiLink pythonConditional Conditional
  449. HiLink pythonRepeat Repeat
  450. HiLink pythonException Exception
  451. HiLink pythonOperator Operator
  452. HiLink pythonClass Type
  453. HiLink pythonDecorator Define
  454. HiLink pythonDottedName Function
  455. HiLink pythonDot Normal
  456. HiLink pythonComment Comment
  457. if !s:Enabled("g:python_highlight_file_headers_as_comments")
  458. HiLink pythonCoding Special
  459. HiLink pythonRun Special
  460. endif
  461. HiLink pythonTodo Todo
  462. HiLink pythonError Error
  463. HiLink pythonIndentError Error
  464. HiLink pythonSpaceError Error
  465. HiLink pythonString String
  466. HiLink pythonRawString String
  467. HiLink pythonUniEscape Special
  468. HiLink pythonUniEscapeError Error
  469. if s:Python2Syntax()
  470. HiLink pythonUniString String
  471. HiLink pythonUniRawString String
  472. HiLink pythonUniRawEscape Special
  473. HiLink pythonUniRawEscapeError Error
  474. else
  475. HiLink pythonBytes String
  476. HiLink pythonRawBytes String
  477. HiLink pythonBytesContent String
  478. HiLink pythonBytesError Error
  479. HiLink pythonBytesEscape Special
  480. HiLink pythonBytesEscapeError Error
  481. endif
  482. HiLink pythonStrFormatting Special
  483. HiLink pythonStrFormat Special
  484. HiLink pythonStrTemplate Special
  485. HiLink pythonDocTest Special
  486. HiLink pythonDocTest2 Special
  487. HiLink pythonNumber Number
  488. HiLink pythonHexNumber Number
  489. HiLink pythonOctNumber Number
  490. HiLink pythonBinNumber Number
  491. HiLink pythonFloat Float
  492. HiLink pythonNumberError Error
  493. HiLink pythonOctError Error
  494. HiLink pythonHexError Error
  495. HiLink pythonBinError Error
  496. HiLink pythonBoolean Boolean
  497. HiLink pythonBuiltinObj Structure
  498. HiLink pythonBuiltinFunc Function
  499. HiLink pythonExClass Structure
  500. delcommand HiLink
  501. endif
  502. let b:current_syntax = "python"