python.vim 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. " Vim syntax file
  2. " Language: Python
  3. " Maintainer: Dmitry Vasiliev <dima@hlabs.spb.ru>
  4. " URL: http://www.hlabs.spb.ru/vim/python.vim
  5. " Last Change: $Date$
  6. " Filenames: *.py
  7. " Version: 2.6.1
  8. " $Rev$
  9. "
  10. " Based on python.vim (from Vim 6.1 distribution)
  11. " by Neil Schemenauer <nas@python.ca>
  12. "
  13. " Thanks:
  14. "
  15. " Jeroen Ruigrok van der Werven
  16. " for the idea to highlight erroneous operators
  17. " Pedro Algarvio
  18. " for the patch to enable spell checking only for the right spots
  19. " (strings and comments)
  20. " John Eikenberry
  21. " for the patch fixing small typo
  22. "
  23. " Options:
  24. "
  25. " For set option do: let OPTION_NAME = 1
  26. " For clear option do: let OPTION_NAME = 0
  27. "
  28. " Option names:
  29. "
  30. " For highlight builtin functions:
  31. " python_highlight_builtins
  32. "
  33. " For highlight standard exceptions:
  34. " python_highlight_exceptions
  35. "
  36. " For highlight string formatting:
  37. " python_highlight_string_formatting
  38. "
  39. " For highlight str.format syntax:
  40. " python_highlight_string_format
  41. "
  42. " For highlight string.Template syntax:
  43. " python_highlight_string_templates
  44. "
  45. " For highlight indentation errors:
  46. " python_highlight_indent_errors
  47. "
  48. " For highlight trailing spaces:
  49. " python_highlight_space_errors
  50. "
  51. " For highlight doc-tests:
  52. " python_highlight_doctests
  53. "
  54. " If you want all Python highlightings above:
  55. " python_highlight_all
  56. " (This option not override previously set options)
  57. "
  58. " For fast machines:
  59. " python_slow_sync
  60. "
  61. " For "print" builtin as function:
  62. " python_print_as_function
  63. " For version 5.x: Clear all syntax items
  64. " For version 6.x: Quit when a syntax file was already loaded
  65. if version < 600
  66. syntax clear
  67. elseif exists("b:current_syntax")
  68. finish
  69. endif
  70. if exists("python_highlight_all") && python_highlight_all != 0
  71. " Not override previously set options
  72. if !exists("python_highlight_builtins")
  73. let python_highlight_builtins = 1
  74. endif
  75. if !exists("python_highlight_exceptions")
  76. let python_highlight_exceptions = 1
  77. endif
  78. if !exists("python_highlight_string_formatting")
  79. let python_highlight_string_formatting = 1
  80. endif
  81. if !exists("python_highlight_string_format")
  82. let python_highlight_string_format = 1
  83. endif
  84. if !exists("python_highlight_string_templates")
  85. let python_highlight_string_templates = 1
  86. endif
  87. if !exists("python_highlight_indent_errors")
  88. let python_highlight_indent_errors = 1
  89. endif
  90. if !exists("python_highlight_space_errors")
  91. let python_highlight_space_errors = 1
  92. endif
  93. if !exists("python_highlight_doctests")
  94. let python_highlight_doctests = 1
  95. endif
  96. endif
  97. " Keywords
  98. syn keyword pythonStatement break continue del
  99. syn keyword pythonStatement exec return
  100. syn keyword pythonStatement pass raise
  101. syn keyword pythonStatement global assert
  102. syn keyword pythonStatement lambda yield
  103. syn keyword pythonStatement with
  104. syn keyword pythonStatement def class nextgroup=pythonFunction skipwhite
  105. syn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" display contained
  106. syn keyword pythonRepeat for while
  107. syn keyword pythonConditional if elif else
  108. syn keyword pythonImport import from as
  109. syn keyword pythonException try except finally
  110. syn keyword pythonOperator and in is not or
  111. if !exists("python_print_as_function") || python_print_as_function == 0
  112. syn keyword pythonStatement print
  113. endif
  114. " Decorators (new in Python 2.4)
  115. syn match pythonDecorator "@" display nextgroup=pythonFunction skipwhite
  116. " Comments
  117. syn match pythonComment "#.*$" display contains=pythonTodo,@Spell
  118. syn match pythonRun "\%^#!.*$"
  119. syn match pythonCoding "\%^.*\(\n.*\)\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$"
  120. syn keyword pythonTodo TODO FIXME XXX contained
  121. " Errors
  122. syn match pythonError "\<\d\+\D\+\>" display
  123. syn match pythonError "[$?]" display
  124. syn match pythonError "[&|]\{2,}" display
  125. syn match pythonError "[=]\{3,}" display
  126. " TODO: Mixing spaces and tabs also may be used for pretty formatting multiline
  127. " statements. For now I don't know how to work around this.
  128. if exists("python_highlight_indent_errors") && python_highlight_indent_errors != 0
  129. syn match pythonIndentError "^\s*\( \t\|\t \)\s*\S"me=e-1 display
  130. endif
  131. " Trailing space errors
  132. if exists("python_highlight_space_errors") && python_highlight_space_errors != 0
  133. syn match pythonSpaceError "\s\+$" display
  134. endif
  135. " Strings
  136. syn region pythonString start=+'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell
  137. syn region pythonString start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonEscape,pythonEscapeError,@Spell
  138. syn region pythonString start=+"""+ end=+"""+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest2,pythonSpaceError,@Spell
  139. syn region pythonString start=+'''+ end=+'''+ keepend contains=pythonEscape,pythonEscapeError,pythonDocTest,pythonSpaceError,@Spell
  140. syn match pythonEscape +\\[abfnrtv'"\\]+ display contained
  141. syn match pythonEscape "\\\o\o\=\o\=" display contained
  142. syn match pythonEscapeError "\\\o\{,2}[89]" display contained
  143. syn match pythonEscape "\\x\x\{2}" display contained
  144. syn match pythonEscapeError "\\x\x\=\X" display contained
  145. syn match pythonEscape "\\$"
  146. " Unicode strings
  147. syn region pythonUniString start=+[uU]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,@Spell
  148. syn region pythonUniString start=+[uU]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,@Spell
  149. syn region pythonUniString start=+[uU]"""+ end=+"""+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell
  150. syn region pythonUniString start=+[uU]'''+ end=+'''+ keepend contains=pythonEscape,pythonUniEscape,pythonEscapeError,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell
  151. syn match pythonUniEscape "\\u\x\{4}" display contained
  152. syn match pythonUniEscapeError "\\u\x\{,3}\X" display contained
  153. syn match pythonUniEscape "\\U\x\{8}" display contained
  154. syn match pythonUniEscapeError "\\U\x\{,7}\X" display contained
  155. syn match pythonUniEscape "\\N{[A-Z ]\+}" display contained
  156. syn match pythonUniEscapeError "\\N{[^A-Z ]\+}" display contained
  157. " Raw strings
  158. syn region pythonRawString start=+[rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell
  159. syn region pythonRawString start=+[rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell
  160. syn region pythonRawString start=+[rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell
  161. syn region pythonRawString start=+[rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell
  162. syn match pythonRawEscape +\\['"]+ display transparent contained
  163. " Unicode raw strings
  164. syn region pythonUniRawString start=+[uU][rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell
  165. syn region pythonUniRawString start=+[uU][rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell
  166. syn region pythonUniRawString start=+[uU][rR]"""+ end=+"""+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest2,pythonSpaceError,@Spell
  167. syn region pythonUniRawString start=+[uU][rR]'''+ end=+'''+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest,pythonSpaceError,@Spell
  168. syn match pythonUniRawEscape "\([^\\]\(\\\\\)*\)\@<=\\u\x\{4}" display contained
  169. syn match pythonUniRawEscapeError "\([^\\]\(\\\\\)*\)\@<=\\u\x\{,3}\X" display contained
  170. if exists("python_highlight_string_formatting") && python_highlight_string_formatting != 0
  171. " String formatting
  172. syn match pythonStrFormatting "%\(([^)]\+)\)\=[-#0 +]*\d*\(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
  173. syn match pythonStrFormatting "%[-#0 +]*\(\*\|\d\+\)\=\(\.\(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
  174. endif
  175. if exists("python_highlight_string_format") && python_highlight_string_format != 0
  176. " str.format syntax
  177. syn match pythonStrFormat "{\([a-zA-Z_][a-zA-Z0-9_]*\|\d\+\)\(\.[a-zA-Z_][a-zA-Z0-9_]*\|\[\(\d\+\|[^!:\}]\+\)\]\)*\(![rs]\)\=\(:\({\([a-zA-Z_][a-zA-Z0-9_]*\|\d\+\)}\|\([^}]\=[<>=^]\)\=[ +-]\=#\=0\=\d*\(\.\d\+\)\=[bcdeEfFgGnoxX%]\=\)\=\)\=}" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
  178. endif
  179. if exists("python_highlight_string_templates") && python_highlight_string_templates != 0
  180. " String templates
  181. syn match pythonStrTemplate "\$\(\$\|{[a-zA-Z_][a-zA-Z0-9_]*}\|[a-zA-Z_][a-zA-Z0-9_]*\)" contained containedin=pythonString,pythonUniString,pythonRawString,pythonUniRawString
  182. endif
  183. if exists("python_highlight_doctests") && python_highlight_doctests != 0
  184. " DocTests
  185. syn region pythonDocTest start="^\s*>>>" end=+'''+he=s-1 end="^\s*$" contained
  186. syn region pythonDocTest2 start="^\s*>>>" end=+"""+he=s-1 end="^\s*$" contained
  187. endif
  188. " Numbers (ints, longs, floats, complex)
  189. syn match pythonHexNumber "\<0[xX]\x\+[lL]\=\>" display
  190. syn match pythonOctNumber "\<0[oO]\o\+[lL]\=\>" display
  191. syn match pythonBinNumber "\<0[bB][01]\+[lL]\=\>" display
  192. syn match pythonNumber "\<\d\+[lLjJ]\=\>" display
  193. syn match pythonFloat "\.\d\+\([eE][+-]\=\d\+\)\=[jJ]\=\>" display
  194. syn match pythonFloat "\<\d\+[eE][+-]\=\d\+[jJ]\=\>" display
  195. syn match pythonFloat "\<\d\+\.\d*\([eE][+-]\=\d\+\)\=[jJ]\=" display
  196. syn match pythonOctError "\<0[oO]\=\o*[8-9]\d*[lL]\=\>" display
  197. syn match pythonHexError "\<0[xX]\x*[g-zG-Z]\x*[lL]\=\>" display
  198. syn match pythonBinError "\<0[bB][01]*[2-9]\d*[lL]\=\>" display
  199. if exists("python_highlight_builtins") && python_highlight_builtins != 0
  200. " Builtin functions, types and objects
  201. syn keyword pythonBuiltinObj True False Ellipsis None NotImplemented
  202. syn keyword pythonBuiltinObj __debug__ __doc__ __file__ __name__ __package__
  203. syn keyword pythonBuiltinFunc __import__ abs all any apply
  204. syn keyword pythonBuiltinFunc basestring bin bool buffer bytearray bytes callable
  205. syn keyword pythonBuiltinFunc chr classmethod cmp coerce compile complex
  206. syn keyword pythonBuiltinFunc delattr dict dir divmod enumerate eval
  207. syn keyword pythonBuiltinFunc execfile file filter float format frozenset getattr
  208. syn keyword pythonBuiltinFunc globals hasattr hash help hex id
  209. syn keyword pythonBuiltinFunc input int intern isinstance
  210. syn keyword pythonBuiltinFunc issubclass iter len list locals long map max
  211. syn keyword pythonBuiltinFunc min next object oct open ord
  212. syn keyword pythonBuiltinFunc pow property range
  213. syn keyword pythonBuiltinFunc raw_input reduce reload repr
  214. syn keyword pythonBuiltinFunc reversed round set setattr
  215. syn keyword pythonBuiltinFunc slice sorted staticmethod str sum super tuple
  216. syn keyword pythonBuiltinFunc type unichr unicode vars xrange zip
  217. if exists("python_print_as_function") && python_print_as_function != 0
  218. syn keyword pythonBuiltinFunc print
  219. endif
  220. endif
  221. if exists("python_highlight_exceptions") && python_highlight_exceptions != 0
  222. " Builtin exceptions and warnings
  223. syn keyword pythonExClass BaseException
  224. syn keyword pythonExClass Exception StandardError ArithmeticError
  225. syn keyword pythonExClass LookupError EnvironmentError
  226. syn keyword pythonExClass AssertionError AttributeError BufferError EOFError
  227. syn keyword pythonExClass FloatingPointError GeneratorExit IOError
  228. syn keyword pythonExClass ImportError IndexError KeyError
  229. syn keyword pythonExClass KeyboardInterrupt MemoryError NameError
  230. syn keyword pythonExClass NotImplementedError OSError OverflowError
  231. syn keyword pythonExClass ReferenceError RuntimeError StopIteration
  232. syn keyword pythonExClass SyntaxError IndentationError TabError
  233. syn keyword pythonExClass SystemError SystemExit TypeError
  234. syn keyword pythonExClass UnboundLocalError UnicodeError
  235. syn keyword pythonExClass UnicodeEncodeError UnicodeDecodeError
  236. syn keyword pythonExClass UnicodeTranslateError ValueError
  237. syn keyword pythonExClass WindowsError ZeroDivisionError
  238. syn keyword pythonExClass Warning UserWarning BytesWarning DeprecationWarning
  239. syn keyword pythonExClass PendingDepricationWarning SyntaxWarning
  240. syn keyword pythonExClass RuntimeWarning FutureWarning
  241. syn keyword pythonExClass ImportWarning UnicodeWarning
  242. endif
  243. if exists("python_slow_sync") && python_slow_sync != 0
  244. syn sync minlines=2000
  245. else
  246. " This is fast but code inside triple quoted strings screws it up. It
  247. " is impossible to fix because the only way to know if you are inside a
  248. " triple quoted string is to start from the beginning of the file.
  249. syn sync match pythonSync grouphere NONE "):$"
  250. syn sync maxlines=200
  251. endif
  252. if version >= 508 || !exists("did_python_syn_inits")
  253. if version <= 508
  254. let did_python_syn_inits = 1
  255. command -nargs=+ HiLink hi link <args>
  256. else
  257. command -nargs=+ HiLink hi def link <args>
  258. endif
  259. HiLink pythonStatement Statement
  260. HiLink pythonImport Statement
  261. HiLink pythonFunction Function
  262. HiLink pythonConditional Conditional
  263. HiLink pythonRepeat Repeat
  264. HiLink pythonException Exception
  265. HiLink pythonOperator Operator
  266. HiLink pythonDecorator Define
  267. HiLink pythonComment Comment
  268. HiLink pythonCoding Special
  269. HiLink pythonRun Special
  270. HiLink pythonTodo Todo
  271. HiLink pythonError Error
  272. HiLink pythonIndentError Error
  273. HiLink pythonSpaceError Error
  274. HiLink pythonString String
  275. HiLink pythonUniString String
  276. HiLink pythonRawString String
  277. HiLink pythonUniRawString String
  278. HiLink pythonEscape Special
  279. HiLink pythonEscapeError Error
  280. HiLink pythonUniEscape Special
  281. HiLink pythonUniEscapeError Error
  282. HiLink pythonUniRawEscape Special
  283. HiLink pythonUniRawEscapeError Error
  284. HiLink pythonStrFormatting Special
  285. HiLink pythonStrFormat Special
  286. HiLink pythonStrTemplate Special
  287. HiLink pythonDocTest Special
  288. HiLink pythonDocTest2 Special
  289. HiLink pythonNumber Number
  290. HiLink pythonHexNumber Number
  291. HiLink pythonOctNumber Number
  292. HiLink pythonBinNumber Number
  293. HiLink pythonFloat Float
  294. HiLink pythonOctError Error
  295. HiLink pythonHexError Error
  296. HiLink pythonBinError Error
  297. HiLink pythonBuiltinObj Structure
  298. HiLink pythonBuiltinFunc Function
  299. HiLink pythonExClass Structure
  300. delcommand HiLink
  301. endif
  302. let b:current_syntax = "python"