python.vim 24KB

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