python.vim 25KB

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