python.vim 25KB

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