python.vim 13KB

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