python.vim 26KB

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