123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- " Vim syntax file
- " Language: Python
- " Maintainer: Neil Schemenauer <nas@python.ca>
- " Last Change: 2014 Jul 16
- " Credits: Zvezdan Petkovic <zpetkovic@acm.org>
- " Neil Schemenauer <nas@python.ca>
- " Dmitry Vasiliev
- "
- " This version is a major rewrite by Zvezdan Petkovic.
- "
- " - introduced highlighting of doctests
- " - updated keywords, built-ins, and exceptions
- " - corrected regular expressions for
- "
- " * functions
- " * decorators
- " * strings
- " * escapes
- " * numbers
- " * space error
- "
- " - corrected synchronization
- " - more highlighting is ON by default, except
- " - space error highlighting is OFF by default
- "
- " Optional highlighting can be controlled using these variables.
- "
- " let python_no_builtin_highlight = 1
- " let python_no_doctest_code_highlight = 1
- " let python_no_doctest_highlight = 1
- " let python_no_exception_highlight = 1
- " let python_no_number_highlight = 1
- " let python_space_error_highlight = 1
- " let python_shebang_header_highlight = 1
- " let python_coding_header_highlight = 1
- "
- " All the options above can be switched on together.
- "
- " let python_highlight_all = 1
- "
-
- " For version 5.x: Clear all syntax items.
- " For version 6.x: Quit when a syntax file was already loaded.
- if version < 600
- syntax clear
- elseif exists("b:current_syntax")
- finish
- endif
-
- " We need nocompatible mode in order to continue lines with backslashes.
- " Original setting will be restored.
- let s:cpo_save = &cpo
- set cpo&vim
-
- " Keep Python keywords in alphabetical order inside groups for easy
- " comparison with the table in the 'Python Language Reference'
- " http://docs.python.org/reference/lexical_analysis.html#keywords.
- " Groups are in the order presented in NAMING CONVENTIONS in syntax.txt.
- " Exceptions come last at the end of each group (class and def below).
- "
- " Keywords 'with' and 'as' are new in Python 2.6
- " (use 'from __future__ import with_statement' in Python 2.5).
- "
- " Some compromises had to be made to support both Python 3.0 and 2.6.
- " We include Python 3.0 features, but when a definition is duplicated,
- " the last definition takes precedence.
- "
- " - 'False', 'None', and 'True' are keywords in Python 3.0 but they are
- " built-ins in 2.6 and will be highlighted as built-ins below.
- " - 'exec' is a built-in in Python 3.0 and will be highlighted as
- " built-in below.
- " - 'nonlocal' is a keyword in Python 3.0 and will be highlighted.
- " - 'print' is a built-in in Python 3.0 and will be highlighted as
- " built-in below (use 'from __future__ import print_function' in 2.6)
- "
- syn keyword pythonStatement False, None, True
- syn keyword pythonStatement as assert break continue del exec global
- syn keyword pythonStatement lambda nonlocal pass print return with yield
- syn keyword pythonStatement class def nextgroup=pythonFunction skipwhite
- syn keyword pythonConditional elif else if
- syn keyword pythonRepeat for while
- syn keyword pythonOperator and in is not or
- syn keyword pythonException except finally raise try
- syn keyword pythonInclude from import
-
- " Decorators (new in Python 2.4)
- syn match pythonDecorator "@" display nextgroup=pythonFunction skipwhite
- " The zero-length non-grouping match before the function name is
- " extremely important in pythonFunction. Without it, everything is
- " interpreted as a function inside the contained environment of
- " doctests.
- " A dot must be allowed because of @MyClass.myfunc decorators.
- syn match pythonFunction
- \ "\%(\%(def\s\|class\s\|@\)\s*\)\@<=\h\%(\w\|\.\)*" contained
-
- " Add spelling to comments with some exceptions
- syn match pythonComment "#.*$" contains=pythonTodo,@Spell
- " Skip for PyLint's in-line comment rules
- syn match pythonComment "# pylint:.*$" contains=@NoSpell
- " Skip noqa inline comments
- syn match pythonComment "# noqa.*$" contains=@NoSpell
- syn keyword pythonTodo FIXME NOTE NOTES TODO XXX contained
-
- " Triple-quoted strings can contain doctests.
- syn region pythonString
- \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
- \ contains=pythonEscape,@Spell
- syn region pythonString
- \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend
- \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell
- syn region pythonRawString
- \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1"
- \ contains=@Spell
- syn region pythonRawString
- \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend
- \ contains=pythonSpaceError,pythonDoctest,@Spell
-
- syn match pythonEscape +\\[abfnrtv'"\\]+ contained
- syn match pythonEscape "\\\o\{1,3}" contained
- syn match pythonEscape "\\x\x\{2}" contained
- syn match pythonEscape "\%(\\u\x\{4}\|\\U\x\{8}\)" contained
- " Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
- syn match pythonEscape "\\N{.\{-}}" contained
- syn match pythonEscape "\\$"
-
- if exists("python_highlight_all")
- if exists("python_no_builtin_highlight")
- unlet python_no_builtin_highlight
- endif
- if exists("python_no_doctest_code_highlight")
- unlet python_no_doctest_code_highlight
- endif
- if exists("python_no_doctest_highlight")
- unlet python_no_doctest_highlight
- endif
- if exists("python_no_exception_highlight")
- unlet python_no_exception_highlight
- endif
- if exists("python_no_number_highlight")
- unlet python_no_number_highlight
- endif
- let python_space_error_highlight = 1
- let python_shebang_header_highlight = 1
- let python_coding_header_highlight = 1
- endif
-
- " It is very important to understand all details before changing the
- " regular expressions below or their order.
- " The word boundaries are *not* the floating-point number boundaries
- " because of a possible leading or trailing decimal point.
- " The expressions below ensure that all valid number literals are
- " highlighted, and invalid number literals are not. For example,
- "
- " - a decimal point in '4.' at the end of a line is highlighted,
- " - a second dot in 1.0.0 is not highlighted,
- " - 08 is not highlighted,
- " - 08e0 or 08j are highlighted,
- "
- " and so on, as specified in the 'Python Language Reference'.
- " http://docs.python.org/reference/lexical_analysis.html#numeric-literals
- if !exists("python_no_number_highlight")
- " numbers (including longs and complex)
- syn match pythonNumber "\<0[oO]\=\o\+[Ll]\=\>"
- syn match pythonNumber "\<0[xX]\x\+[Ll]\=\>"
- syn match pythonNumber "\<0[bB][01]\+[Ll]\=\>"
- syn match pythonNumber "\<\%([1-9]\d*\|0\)[Ll]\=\>"
- syn match pythonNumber "\<\d\+[jJ]\>"
- syn match pythonNumber "\<\d\+[eE][+-]\=\d\+[jJ]\=\>"
- syn match pythonNumber
- \ "\<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@="
- syn match pythonNumber
- \ "\%(^\|\W\)\@<=\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>"
- endif
-
- " Group the built-ins in the order in the 'Python Library Reference' for
- " easier comparison.
- " http://docs.python.org/library/constants.html
- " http://docs.python.org/library/functions.html
- " http://docs.python.org/library/functions.html#non-essential-built-in-functions
- " Python built-in functions are in alphabetical order.
- if !exists("python_no_builtin_highlight")
- " built-in constants
- " 'False', 'True', and 'None' are also reserved words in Python 3.0
- syn keyword pythonBuiltin False True None
- syn keyword pythonBuiltin NotImplemented Ellipsis __debug__
- " built-in functions
- syn keyword pythonBuiltin abs all any bin bool chr classmethod
- syn keyword pythonBuiltin compile complex delattr dict dir divmod
- syn keyword pythonBuiltin enumerate eval filter float format
- syn keyword pythonBuiltin frozenset getattr globals hasattr hash
- syn keyword pythonBuiltin help hex id input int isinstance
- syn keyword pythonBuiltin issubclass iter len list locals map max
- syn keyword pythonBuiltin min next object oct open ord pow print
- syn keyword pythonBuiltin property range repr reversed round set
- syn keyword pythonBuiltin setattr slice sorted staticmethod str
- syn keyword pythonBuiltin sum super tuple type vars zip __import__
- " Python 2.6 only
- syn keyword pythonBuiltin basestring callable cmp execfile file
- syn keyword pythonBuiltin long raw_input reduce reload unichr
- syn keyword pythonBuiltin unicode xrange
- " Python 3.0 only
- syn keyword pythonBuiltin ascii bytearray bytes exec memoryview
- " non-essential built-in functions; Python 2.6 only
- syn keyword pythonBuiltin apply buffer coerce intern
- endif
-
- " From the 'Python Library Reference' class hierarchy at the bottom.
- " http://docs.python.org/library/exceptions.html
- if !exists("python_no_exception_highlight")
- " builtin base exceptions (only used as base classes for other exceptions)
- syn keyword pythonExceptions BaseException Exception
- syn keyword pythonExceptions ArithmeticError EnvironmentError
- syn keyword pythonExceptions LookupError
- " builtin base exception removed in Python 3.0
- syn keyword pythonExceptions StandardError
- " builtin exceptions (actually raised)
- syn keyword pythonExceptions AssertionError AttributeError BufferError
- syn keyword pythonExceptions EOFError FloatingPointError GeneratorExit
- syn keyword pythonExceptions IOError ImportError IndentationError
- syn keyword pythonExceptions IndexError KeyError KeyboardInterrupt
- syn keyword pythonExceptions MemoryError NameError NotImplementedError
- syn keyword pythonExceptions OSError OverflowError ReferenceError
- syn keyword pythonExceptions RuntimeError StopIteration SyntaxError
- syn keyword pythonExceptions SystemError SystemExit TabError TypeError
- syn keyword pythonExceptions UnboundLocalError UnicodeError
- syn keyword pythonExceptions UnicodeDecodeError UnicodeEncodeError
- syn keyword pythonExceptions UnicodeTranslateError ValueError VMSError
- syn keyword pythonExceptions WindowsError ZeroDivisionError
- " builtin warnings
- syn keyword pythonExceptions BytesWarning DeprecationWarning FutureWarning
- syn keyword pythonExceptions ImportWarning PendingDeprecationWarning
- syn keyword pythonExceptions RuntimeWarning SyntaxWarning UnicodeWarning
- syn keyword pythonExceptions UserWarning Warning
- endif
-
- if exists("python_space_error_highlight")
- " trailing whitespace
- syn match pythonSpaceError display excludenl "\s\+$"
- " mixed tabs and spaces
- syn match pythonSpaceError display " \+\t"
- syn match pythonSpaceError display "\t\+ "
- endif
-
- if exists("python_shebang_header_highlight")
- syn match pythonRun "\%^#!.*$" contains=@NoSpell
- endif
-
- if exists("python_coding_header_highlight")
- syn match pythonCoding "\%^.*\%(\n.*\)\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$" contains=@NoSpell
- endif
-
- " Do not spell doctests inside strings.
- " Notice that the end of a string, either ''', or """, will end the contained
- " doctest too. Thus, we do *not* need to have it as an end pattern.
- if !exists("python_no_doctest_highlight")
- if !exists("python_no_doctest_code_highlight")
- syn region pythonDoctest
- \ start="^\s*>>>\s" end="^\s*$"
- \ contained contains=ALLBUT,pythonDoctest,@Spell
- syn region pythonDoctestValue
- \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$"
- \ contained
- else
- syn region pythonDoctest
- \ start="^\s*>>>" end="^\s*$"
- \ contained contains=@NoSpell
- endif
- endif
-
- " Sync at the beginning of class, function, or method definition.
- syn sync match pythonSync grouphere NONE "^\s*\%(def\|class\)\s\+\h\w*\s*("
-
- if version >= 508 || !exists("did_python_syn_inits")
- if version <= 508
- let did_python_syn_inits = 1
- command -nargs=+ HiLink hi link <args>
- else
- command -nargs=+ HiLink hi def link <args>
- endif
-
- " The default highlight links. Can be overridden later.
- HiLink pythonStatement Statement
- HiLink pythonConditional Conditional
- HiLink pythonRepeat Repeat
- HiLink pythonOperator Operator
- HiLink pythonException Exception
- HiLink pythonInclude Include
- HiLink pythonDecorator Define
- HiLink pythonFunction Function
- HiLink pythonComment Comment
- if exists("python_shebang_header_highlight")
- HiLink pythonRun Special
- endif
- if exists("python_coding_header_highlight")
- HiLink pythonCoding Special
- endif
- HiLink pythonTodo Todo
- HiLink pythonString String
- HiLink pythonRawString String
- HiLink pythonEscape Special
- if !exists("python_no_number_highlight")
- HiLink pythonNumber Number
- endif
- if !exists("python_no_builtin_highlight")
- HiLink pythonBuiltin Function
- endif
- if !exists("python_no_exception_highlight")
- HiLink pythonExceptions Structure
- endif
- if exists("python_space_error_highlight")
- HiLink pythonSpaceError Error
- endif
- if !exists("python_no_doctest_highlight")
- HiLink pythonDoctest Special
- HiLink pythonDoctestValue Define
- endif
-
- delcommand HiLink
- endif
-
- let b:current_syntax = "python"
-
- let &cpo = s:cpo_save
- unlet s:cpo_save
-
- " vim:set sw=2 sts=2 ts=8 noet:
|