python.vim 14KB

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