python.vim 25KB

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