python.vim 24KB

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