Mercurial > vim
annotate runtime/syntax/python.vim @ 7014:962b3ae252a9 v7.4.824
patch 7.4.824
Problem: Can't compile without the multi-byte feature. (John Marriott)
Solution: Add #ifdef.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 12 Aug 2015 22:56:58 +0200 |
parents | b2673982c625 |
children | c590de398af9 |
rev | line source |
---|---|
7 | 1 " Vim syntax file |
2 " Language: Python | |
6840 | 3 " Maintainer: Zvezdan Petkovic <zpetkovic@acm.org> |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
4 " Last Change: 2015 Jul 14 |
6840 | 5 " Credits: Neil Schemenauer <nas@python.ca> |
2034 | 6 " Dmitry Vasiliev |
7 | 7 " |
2034 | 8 " This version is a major rewrite by Zvezdan Petkovic. |
7 | 9 " |
2034 | 10 " - introduced highlighting of doctests |
11 " - updated keywords, built-ins, and exceptions | |
12 " - corrected regular expressions for | |
7 | 13 " |
2034 | 14 " * functions |
15 " * decorators | |
16 " * strings | |
17 " * escapes | |
18 " * numbers | |
19 " * space error | |
7 | 20 " |
2034 | 21 " - corrected synchronization |
22 " - more highlighting is ON by default, except | |
23 " - space error highlighting is OFF by default | |
7 | 24 " |
2034 | 25 " Optional highlighting can be controlled using these variables. |
7 | 26 " |
2034 | 27 " let python_no_builtin_highlight = 1 |
28 " let python_no_doctest_code_highlight = 1 | |
29 " let python_no_doctest_highlight = 1 | |
30 " let python_no_exception_highlight = 1 | |
31 " let python_no_number_highlight = 1 | |
32 " let python_space_error_highlight = 1 | |
7 | 33 " |
2034 | 34 " All the options above can be switched on together. |
35 " | |
36 " let python_highlight_all = 1 | |
7 | 37 " |
38 | |
2034 | 39 " For version 5.x: Clear all syntax items. |
40 " For version 6.x: Quit when a syntax file was already loaded. | |
7 | 41 if version < 600 |
42 syntax clear | |
43 elseif exists("b:current_syntax") | |
44 finish | |
45 endif | |
46 | |
2587 | 47 " We need nocompatible mode in order to continue lines with backslashes. |
48 " Original setting will be restored. | |
49 let s:cpo_save = &cpo | |
50 set cpo&vim | |
51 | |
2034 | 52 " Keep Python keywords in alphabetical order inside groups for easy |
53 " comparison with the table in the 'Python Language Reference' | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
54 " https://docs.python.org/2/reference/lexical_analysis.html#keywords, |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
55 " https://docs.python.org/3/reference/lexical_analysis.html#keywords. |
2034 | 56 " Groups are in the order presented in NAMING CONVENTIONS in syntax.txt. |
57 " Exceptions come last at the end of each group (class and def below). | |
58 " | |
59 " Keywords 'with' and 'as' are new in Python 2.6 | |
60 " (use 'from __future__ import with_statement' in Python 2.5). | |
61 " | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
62 " Some compromises had to be made to support both Python 3 and 2. |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
63 " We include Python 3 features, but when a definition is duplicated, |
2034 | 64 " the last definition takes precedence. |
65 " | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
66 " - 'False', 'None', and 'True' are keywords in Python 3 but they are |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
67 " built-ins in 2 and will be highlighted as built-ins below. |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
68 " - 'exec' is a built-in in Python 3 and will be highlighted as |
2034 | 69 " built-in below. |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
70 " - 'nonlocal' is a keyword in Python 3 and will be highlighted. |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
71 " - 'print' is a built-in in Python 3 and will be highlighted as |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
72 " built-in below (use 'from __future__ import print_function' in 2) |
2034 | 73 " |
74 syn keyword pythonStatement False, None, True | |
75 syn keyword pythonStatement as assert break continue del exec global | |
76 syn keyword pythonStatement lambda nonlocal pass print return with yield | |
77 syn keyword pythonStatement class def nextgroup=pythonFunction skipwhite | |
78 syn keyword pythonConditional elif else if | |
7 | 79 syn keyword pythonRepeat for while |
80 syn keyword pythonOperator and in is not or | |
2034 | 81 syn keyword pythonException except finally raise try |
82 syn keyword pythonInclude from import | |
7 | 83 |
859 | 84 " Decorators (new in Python 2.4) |
85 syn match pythonDecorator "@" display nextgroup=pythonFunction skipwhite | |
2034 | 86 " The zero-length non-grouping match before the function name is |
87 " extremely important in pythonFunction. Without it, everything is | |
88 " interpreted as a function inside the contained environment of | |
89 " doctests. | |
90 " A dot must be allowed because of @MyClass.myfunc decorators. | |
91 syn match pythonFunction | |
92 \ "\%(\%(def\s\|class\s\|@\)\s*\)\@<=\h\%(\w\|\.\)*" contained | |
859 | 93 |
2034 | 94 syn match pythonComment "#.*$" contains=pythonTodo,@Spell |
95 syn keyword pythonTodo FIXME NOTE NOTES TODO XXX contained | |
96 | |
97 " Triple-quoted strings can contain doctests. | |
6840 | 98 syn region pythonString matchgroup=pythonQuotes |
2034 | 99 \ start=+[uU]\=\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" |
100 \ contains=pythonEscape,@Spell | |
6840 | 101 syn region pythonString matchgroup=pythonTripleQuotes |
2034 | 102 \ start=+[uU]\=\z('''\|"""\)+ end="\z1" keepend |
103 \ contains=pythonEscape,pythonSpaceError,pythonDoctest,@Spell | |
6840 | 104 syn region pythonRawString matchgroup=pythonQuotes |
2034 | 105 \ start=+[uU]\=[rR]\z(['"]\)+ end="\z1" skip="\\\\\|\\\z1" |
106 \ contains=@Spell | |
6840 | 107 syn region pythonRawString matchgroup=pythonTripleQuotes |
2034 | 108 \ start=+[uU]\=[rR]\z('''\|"""\)+ end="\z1" keepend |
109 \ contains=pythonSpaceError,pythonDoctest,@Spell | |
110 | |
111 syn match pythonEscape +\\[abfnrtv'"\\]+ contained | |
112 syn match pythonEscape "\\\o\{1,3}" contained | |
113 syn match pythonEscape "\\x\x\{2}" contained | |
114 syn match pythonEscape "\%(\\u\x\{4}\|\\U\x\{8}\)" contained | |
115 " Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/ | |
6840 | 116 syn match pythonEscape "\\N{\a\+\%(\s\a\+\)*}" contained |
2034 | 117 syn match pythonEscape "\\$" |
7 | 118 |
119 if exists("python_highlight_all") | |
2034 | 120 if exists("python_no_builtin_highlight") |
121 unlet python_no_builtin_highlight | |
122 endif | |
123 if exists("python_no_doctest_code_highlight") | |
124 unlet python_no_doctest_code_highlight | |
125 endif | |
126 if exists("python_no_doctest_highlight") | |
127 unlet python_no_doctest_highlight | |
128 endif | |
129 if exists("python_no_exception_highlight") | |
130 unlet python_no_exception_highlight | |
131 endif | |
132 if exists("python_no_number_highlight") | |
133 unlet python_no_number_highlight | |
134 endif | |
135 let python_space_error_highlight = 1 | |
7 | 136 endif |
137 | |
2034 | 138 " It is very important to understand all details before changing the |
139 " regular expressions below or their order. | |
140 " The word boundaries are *not* the floating-point number boundaries | |
141 " because of a possible leading or trailing decimal point. | |
142 " The expressions below ensure that all valid number literals are | |
143 " highlighted, and invalid number literals are not. For example, | |
144 " | |
145 " - a decimal point in '4.' at the end of a line is highlighted, | |
146 " - a second dot in 1.0.0 is not highlighted, | |
147 " - 08 is not highlighted, | |
148 " - 08e0 or 08j are highlighted, | |
149 " | |
150 " and so on, as specified in the 'Python Language Reference'. | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
151 " https://docs.python.org/2/reference/lexical_analysis.html#numeric-literals |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
152 " https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals |
2034 | 153 if !exists("python_no_number_highlight") |
7 | 154 " numbers (including longs and complex) |
2034 | 155 syn match pythonNumber "\<0[oO]\=\o\+[Ll]\=\>" |
156 syn match pythonNumber "\<0[xX]\x\+[Ll]\=\>" | |
157 syn match pythonNumber "\<0[bB][01]\+[Ll]\=\>" | |
158 syn match pythonNumber "\<\%([1-9]\d*\|0\)[Ll]\=\>" | |
159 syn match pythonNumber "\<\d\+[jJ]\>" | |
160 syn match pythonNumber "\<\d\+[eE][+-]\=\d\+[jJ]\=\>" | |
161 syn match pythonNumber | |
162 \ "\<\d\+\.\%([eE][+-]\=\d\+\)\=[jJ]\=\%(\W\|$\)\@=" | |
163 syn match pythonNumber | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
164 \ "\%(^\|\W\)\zs\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>" |
7 | 165 endif |
166 | |
2034 | 167 " Group the built-ins in the order in the 'Python Library Reference' for |
168 " easier comparison. | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
169 " https://docs.python.org/2/library/constants.html |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
170 " https://docs.python.org/3/library/constants.html |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
171 " http://docs.python.org/2/library/functions.html |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
172 " http://docs.python.org/3/library/functions.html |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
173 " http://docs.python.org/2/library/functions.html#non-essential-built-in-functions |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
174 " http://docs.python.org/3/library/functions.html#non-essential-built-in-functions |
2034 | 175 " Python built-in functions are in alphabetical order. |
176 if !exists("python_no_builtin_highlight") | |
177 " built-in constants | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
178 " 'False', 'True', and 'None' are also reserved words in Python 3 |
2034 | 179 syn keyword pythonBuiltin False True None |
180 syn keyword pythonBuiltin NotImplemented Ellipsis __debug__ | |
181 " built-in functions | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
182 syn keyword pythonBuiltin abs all any bin bool bytearray callable chr |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
183 syn keyword pythonBuiltin classmethod compile complex delattr dict dir |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
184 syn keyword pythonBuiltin divmod enumerate eval filter float format |
2034 | 185 syn keyword pythonBuiltin frozenset getattr globals hasattr hash |
186 syn keyword pythonBuiltin help hex id input int isinstance | |
187 syn keyword pythonBuiltin issubclass iter len list locals map max | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
188 syn keyword pythonBuiltin memoryview min next object oct open ord pow |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
189 syn keyword pythonBuiltin print property range repr reversed round set |
2034 | 190 syn keyword pythonBuiltin setattr slice sorted staticmethod str |
191 syn keyword pythonBuiltin sum super tuple type vars zip __import__ | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
192 " Python 2 only |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
193 syn keyword pythonBuiltin basestring cmp execfile file |
2034 | 194 syn keyword pythonBuiltin long raw_input reduce reload unichr |
195 syn keyword pythonBuiltin unicode xrange | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
196 " Python 3 only |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
197 syn keyword pythonBuiltin ascii bytes exec |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
198 " non-essential built-in functions; Python 2 only |
2034 | 199 syn keyword pythonBuiltin apply buffer coerce intern |
7 | 200 endif |
201 | |
2034 | 202 " From the 'Python Library Reference' class hierarchy at the bottom. |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
203 " http://docs.python.org/2/library/exceptions.html |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
204 " http://docs.python.org/3/library/exceptions.html |
2034 | 205 if !exists("python_no_exception_highlight") |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
206 " builtin base exceptions (used mostly as base classes for other exceptions) |
2034 | 207 syn keyword pythonExceptions BaseException Exception |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
208 syn keyword pythonExceptions ArithmeticError BufferError |
2034 | 209 syn keyword pythonExceptions LookupError |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
210 " builtin base exceptions removed in Python 3 |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
211 syn keyword pythonExceptions EnvironmentError StandardError |
2034 | 212 " builtin exceptions (actually raised) |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
213 syn keyword pythonExceptions AssertionError AttributeError |
2034 | 214 syn keyword pythonExceptions EOFError FloatingPointError GeneratorExit |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
215 syn keyword pythonExceptions ImportError IndentationError |
2034 | 216 syn keyword pythonExceptions IndexError KeyError KeyboardInterrupt |
217 syn keyword pythonExceptions MemoryError NameError NotImplementedError | |
218 syn keyword pythonExceptions OSError OverflowError ReferenceError | |
219 syn keyword pythonExceptions RuntimeError StopIteration SyntaxError | |
220 syn keyword pythonExceptions SystemError SystemExit TabError TypeError | |
221 syn keyword pythonExceptions UnboundLocalError UnicodeError | |
222 syn keyword pythonExceptions UnicodeDecodeError UnicodeEncodeError | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
223 syn keyword pythonExceptions UnicodeTranslateError ValueError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
224 syn keyword pythonExceptions ZeroDivisionError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
225 " builtin OS exceptions in Python 3 |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
226 syn keyword pythonExceptions BlockingIOError BrokenPipeError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
227 syn keyword pythonExceptions ChildProcessError ConnectionAbortedError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
228 syn keyword pythonExceptions ConnectionError ConnectionRefusedError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
229 syn keyword pythonExceptions ConnectionResetError FileExistsError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
230 syn keyword pythonExceptions FileNotFoundError InterruptedError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
231 syn keyword pythonExceptions IsADirectoryError NotADirectoryError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
232 syn keyword pythonExceptions PermissionError ProcessLookupError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
233 syn keyword pythonExceptions TimeoutError |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
234 " builtin exceptions deprecated/removed in Python 3 |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
235 syn keyword pythonExceptions IOError VMSError WindowsError |
2034 | 236 " builtin warnings |
237 syn keyword pythonExceptions BytesWarning DeprecationWarning FutureWarning | |
238 syn keyword pythonExceptions ImportWarning PendingDeprecationWarning | |
239 syn keyword pythonExceptions RuntimeWarning SyntaxWarning UnicodeWarning | |
240 syn keyword pythonExceptions UserWarning Warning | |
6951
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
241 " builtin warnings in Python 3 |
b2673982c625
Updated and new runtime files.
Bram Moolenaar <bram@vim.org>
parents:
6840
diff
changeset
|
242 syn keyword pythonExceptions ResourceWarning |
7 | 243 endif |
244 | |
2034 | 245 if exists("python_space_error_highlight") |
7 | 246 " trailing whitespace |
2034 | 247 syn match pythonSpaceError display excludenl "\s\+$" |
7 | 248 " mixed tabs and spaces |
2034 | 249 syn match pythonSpaceError display " \+\t" |
250 syn match pythonSpaceError display "\t\+ " | |
7 | 251 endif |
252 | |
2034 | 253 " Do not spell doctests inside strings. |
254 " Notice that the end of a string, either ''', or """, will end the contained | |
255 " doctest too. Thus, we do *not* need to have it as an end pattern. | |
256 if !exists("python_no_doctest_highlight") | |
4186 | 257 if !exists("python_no_doctest_code_highlight") |
2034 | 258 syn region pythonDoctest |
259 \ start="^\s*>>>\s" end="^\s*$" | |
260 \ contained contains=ALLBUT,pythonDoctest,@Spell | |
261 syn region pythonDoctestValue | |
262 \ start=+^\s*\%(>>>\s\|\.\.\.\s\|"""\|'''\)\@!\S\++ end="$" | |
263 \ contained | |
264 else | |
265 syn region pythonDoctest | |
266 \ start="^\s*>>>" end="^\s*$" | |
267 \ contained contains=@NoSpell | |
268 endif | |
269 endif | |
270 | |
271 " Sync at the beginning of class, function, or method definition. | |
272 syn sync match pythonSync grouphere NONE "^\s*\%(def\|class\)\s\+\h\w*\s*(" | |
7 | 273 |
274 if version >= 508 || !exists("did_python_syn_inits") | |
275 if version <= 508 | |
276 let did_python_syn_inits = 1 | |
277 command -nargs=+ HiLink hi link <args> | |
278 else | |
279 command -nargs=+ HiLink hi def link <args> | |
280 endif | |
281 | |
2034 | 282 " The default highlight links. Can be overridden later. |
7 | 283 HiLink pythonStatement Statement |
284 HiLink pythonConditional Conditional | |
285 HiLink pythonRepeat Repeat | |
2034 | 286 HiLink pythonOperator Operator |
287 HiLink pythonException Exception | |
288 HiLink pythonInclude Include | |
289 HiLink pythonDecorator Define | |
290 HiLink pythonFunction Function | |
291 HiLink pythonComment Comment | |
292 HiLink pythonTodo Todo | |
7 | 293 HiLink pythonString String |
294 HiLink pythonRawString String | |
6840 | 295 HiLink pythonQuotes String |
296 HiLink pythonTripleQuotes pythonQuotes | |
7 | 297 HiLink pythonEscape Special |
2034 | 298 if !exists("python_no_number_highlight") |
299 HiLink pythonNumber Number | |
7 | 300 endif |
2034 | 301 if !exists("python_no_builtin_highlight") |
7 | 302 HiLink pythonBuiltin Function |
303 endif | |
2034 | 304 if !exists("python_no_exception_highlight") |
305 HiLink pythonExceptions Structure | |
7 | 306 endif |
2034 | 307 if exists("python_space_error_highlight") |
7 | 308 HiLink pythonSpaceError Error |
309 endif | |
2034 | 310 if !exists("python_no_doctest_highlight") |
311 HiLink pythonDoctest Special | |
312 HiLink pythonDoctestValue Define | |
313 endif | |
7 | 314 |
315 delcommand HiLink | |
316 endif | |
317 | |
318 let b:current_syntax = "python" | |
319 | |
2587 | 320 let &cpo = s:cpo_save |
321 unlet s:cpo_save | |
322 | |
2034 | 323 " vim:set sw=2 sts=2 ts=8 noet: |